De quelle autorisation ai-je besoin pour accéder à Internet à partir d'une application Android?


596

J'obtiens l'exception suivante lors de l'exécution de mon application:

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

Comment résoudre le problème de permission manquant?

Réponses:


1245

Ajoutez l' autorisation INTERNET à votre fichier manifeste.

Vous devez ajouter cette ligne:

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

en dehors de la balise d'application dans votre AndroidManifest.xml


43
Cette balise doit être placée AVANT le TAG d'application. Si vous mettez if après aplication TAG, cela produit un avertissement.
Marek

2
Redémarrez l'émulateur (était nécessaire pour moi avant que cela ne prenne effet).
jcalfee314

J'ai un problème. Je ne veux pas accéder à Internet pour mon apk. Aucune autorisation n'a été ajoutée pour manifester, mais si j'essaie d'installer apk, l'installation m'informe, que apk nécessite un ACCÈS INTERNET COMPLET. Comment résoudre ce problème ? aucune autorisation ajoutée au manifeste. Mon apk ne nécessite pas un accès Internet complet - je veux désactiver cette autorisation.
Altivo

1
@Altivo Regardez votre manifeste fusionné dans ../app/build/intermediates/manifests/full/debug/AndroidManifest.xml. Vous trouverez ici toutes les autorisations que votre application utilise. Ceci est formé en fusionnant le manifeste de votre application ainsi que les manifestes des bibliothèques utilisées. Vous devez avoir principalement utilisé la bibliothèque des services Google Play, qui contient les autorisations INTERNET et ACCESS_NETWORK_STATE.
Sid

116

Dans la dernière version de Google Play, Google a supprimé la nécessité de demander la permission d'Internet, car "la plupart des applications en ont de toute façon besoin de nos jours". Cependant, pour les utilisateurs qui ont des versions plus anciennes, il est toujours recommandé de laisser le code ci-dessous dans votre manifeste

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

1
Une référence à un document Google où il est dit?
farindk

@farindk la première section de notes ici: support.google.com/googleplay/answer/6014972?hl=en
Finley Smith

24
Le document auquel vous liez explique comment le Play Store n'inclura pas l'autorisation Internet dans la liste principale des autorisations qu'il affiche à l'utilisateur lorsqu'il demande s'il faut installer une application. Il ne dit pas qu'une application qui utilise Internet n'a plus besoin de déclarer qu'elle le fait dans la liste des autorisations utilisées de son manifeste. Voulez-vous dire que toutes les applications utilisent implicitement Internet sans le dire dans leurs manifestes? Autrement dit, si Janusz exécutait la même application à partir de la question dans les téléphones d'aujourd'hui , cela n'aurait-il pas échoué comme il l'a fait lorsque la question a été posée?
Rob Kennedy

2
Si vous référez les documents d'autorisation, vous verrez qu'il n'est pas obsolète. Les autorisations obsolètes sont des autorisations qui ne sont pas utilisées, que vous n'avez pas besoin d'avoir dans votre manifeste car elles ne sont plus utilisées. Les autorisations inutilisées peuvent être dues au fait que l'API a été remplacée ou parce qu'elle n'est plus nécessaire. Alors oui, vous avez besoin de l'autorisation Internet pour accéder à Internet. Même les documents de base sur la connexion à Internet indiquent également que l'autorisation Internet est requise.
Zoe


76

il suffit de mettre au-dessus de la ligne comme ci-dessous

<?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>


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

connaissez-vous d'autres autorisations qui pourraient être nécessaires pour permettre l'authentification NTLM / Windows? Surtout dans un environnement XenMobile ... juste lancer une fléchette ici ..
whyoz

12

Si vous souhaitez utiliser Internet dans votre application et vérifier l'état du réseau, c'est-à-dire si l'application est connectée à Internet, vous devez utiliser le code ci-dessous en dehors de la applicationbalise.

Pour l'autorisation Internet:

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

Pour l'état du réseau Access:

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

Code complet:

<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>

7

si vous utilisez simplement Internet, utilisez-

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

si vous obtenez l'état d'Internet, utilisez également -

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

juste au-dessus de la balise d'application.


6

oublier d'ajouter l'autorisation dans le manifeste Ajouter ce code comme méthode

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;
}

et écrivez ceci dans votre 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);
    }

4

Utilisez ceux-ci:

<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" />

3

Mettez simplement le code ci-dessous dans AndroidManifest:

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

3

Selon les versions actuelles, Android ne demande pas la permission d'interagir avec Internet, mais vous pouvez ajouter le code ci-dessous qui aidera les utilisateurs utilisant des versions plus anciennes. Ajoutez-les simplement dans AndroidManifest

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


1

Google a supprimé la nécessité de demander la permission d'Internet pour la dernière version. Néanmoins, pour demander une autorisation Internet dans votre code, vous devez les ajouter à votre fichier AndroidManifest.xml.

<uses-permission android:name="android.permission.INTERNET"/>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.