¿Qué permiso necesito para acceder a Internet desde una aplicación de Android?

596

Recibo la siguiente excepción al ejecutar mi aplicación:

java.net.SocketException: Permission denied (maybe missing INTERNET permission)

¿Cómo resuelvo el problema de permiso que falta?

Janusz
fuente

Respuestas:

1245

Agregue el permiso de INTERNET a su archivo de manifiesto.

Tienes que agregar esta línea:

<uses-permission android:name="android.permission.INTERNET" /> 

fuera de la etiqueta de la aplicación en su AndroidManifest.xml

mhsmith
fuente
43
Esta etiqueta debe colocarse ANTES de la etiqueta de aplicación. Si lo pone después de la aplicación TAG, produce una advertencia.
Marek
2
Reinicie el emulador (fue necesario para mí antes de que esto surta efecto).
jcalfee314
Tengo un problema. No quiero acceso a internet para mi apk. No se agregó permiso para manifestar, pero si intento instalar apk, la instalación me informa que esa apk necesita ACCESO COMPLETO A INTERNET. Cómo resolver este problema ? sin permisos agregados al manifiesto. Mi apk no requiere acceso completo a Internet; quiero deshabilitar este permiso.
Altivo
1
@Altivo Mire su manifiesto combinado en ../app/build/intermediates/manifests/full/debug/AndroidManifest.xml. Aquí encontrará todos los permisos que usa su aplicación. Esto se forma al fusionar el manifiesto de su aplicación y los manifiestos de las bibliotecas utilizadas. Debe haber utilizado principalmente la biblioteca de servicios de Google Play, que contiene los permisos INTERNET y ACCESS_NETWORK_STATE.
Sid
116

En la última versión de Google Play, Google eliminó la necesidad de pedir permiso para Internet, ya que "la mayoría de las aplicaciones lo necesitan de todos modos hoy en día". Sin embargo, para los usuarios que tienen versiones anteriores, aún se recomienda dejar el siguiente código en su manifiesto

<uses-permission android:name="android.permission.INTERNET" /> 
Finley Smith
fuente
1
¿Alguna referencia a un documento de Google donde lo diga?
farindk
@farindk la primera sección de notas aquí: support.google.com/googleplay/answer/6014972?hl=es
Finley Smith el
24
El documento al que se vincula habla de cómo Play Store no incluirá el permiso de Internet en la lista principal de permisos que muestra al usuario cuando se le pregunta si desea instalar una aplicación. Que no se diga que una aplicación que utiliza el Internet necesidades ya no declarar que lo hace en su lista de manifiesto de permisos usados. ¿Quiere decir que todas las aplicaciones usan Internet implícitamente sin decirlo en sus manifiestos? Es decir, si Janusz ejecutó la misma aplicación de la pregunta en los teléfonos de hoy , ¿ no habría fallado de la manera en que lo hizo cuando se hizo la pregunta?
Rob Kennedy el
2
Si hace referencia a los documentos de permiso , verá que no está en desuso. Los permisos en desuso son permisos que no se usan, que no necesita tener en su manifiesto porque ya no se usan. Los permisos no utilizados pueden ser porque se reemplazó la API o porque ya no es necesaria. Entonces, sí, necesitas el permiso de Internet para acceder a Internet. Incluso los documentos básicos sobre la conexión a Internet también establecen que se requiere el permiso de Internet.
Zoe
76

solo pon la línea de arriba como abajo

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.avocats.activeavocats"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="16" />

 <uses-permission android:name="android.permission.INTERNET" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >


    <activity
        android:name="com.example.exp.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

Kirtikumar A.
fuente
42
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
AndroidDev
fuente
¿conoce otros permisos que puedan ser necesarios para permitir la autenticación NTLM / Windows? Especialmente en un entorno XenMobile ... acaba de lanzar un dardo aquí ..
whyoz
12

Si desea usar Internet en su aplicación, así como verificar el estado de la red, es decir, si la aplicación está conectada a Internet, debe usar el siguiente código fuera de la applicationetiqueta.

Para permiso de internet:

<uses-permission android:name="android.permission.INTERNET" />

Para el estado de la red de acceso:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Código completo:

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="16" />

 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >


    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
Amy
fuente
7

si solo usa internet, entonces use-

<uses-permission android:name="android.permission.INTERNET" />

si está obteniendo el estado de internet, use también:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

justo encima de la etiqueta de la aplicación.

Akshay Paliwal
fuente
6

olvídate de agregar el permiso en el manifiesto Agrega este código como método

public static boolean hasPermissions(Context context, String... permissions)
{
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null)
    {
        for (String permission : permissions)
        {
            if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED)
            {
                return false;
            }
        }
    }
    return true;
}

y escribe esto en tu Main

int PERMISSION_ALL = 1;
    String[] PERMISSIONS = {Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_SMS, Manifest.permission.CAMERA};

    if (!hasPermissions(this, PERMISSIONS)) {
        ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);
    }
Vaibhav Joshi
fuente
4

Use estos:

<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
Olorunfemi Ajibulu
fuente
3

Simplemente ponga el siguiente código en AndroidManifest:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Hiren Gondaliya
fuente
3

Según las versiones actuales, Android no solicita permiso para interactuar con Internet, pero puede agregar el siguiente código que ayudará a los usuarios que usan versiones anteriores. Solo agregue estos en AndroidManifest

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Kashif Faraz Shamsi
fuente
1

Google eliminó la necesidad de pedir permiso para internet para la última versión. Aún así, para solicitar permiso de Internet en su código, debe agregarlos a su archivo AndroidManifest.xml.

<uses-permission android:name="android.permission.INTERNET"/>
Kanwarpreet Singh
fuente