web-dev-qa-db-fra.com

Permission refusée (permission INTERNET manquante?): Mais la permission est donnée

J'essaie d'appeler un httpClient et la réponse est "Autorisation refusée (autorisation INTERNET manquante?)". Dans le navigateur normal d'Android, je peux ouvrir l'URL sans problème.

 public static String getHttpResponse(URI uri) {
    StringBuilder response = new StringBuilder();
    try {

        HttpGet get = new HttpGet();
        get.setURI(uri);
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpResponse httpResponse = httpClient.execute(get);

        if (httpResponse.getStatusLine().getStatusCode() == 200) {
            Log.d("demo", "HTTP Get succeeded");

            HttpEntity messageEntity = httpResponse.getEntity();
            InputStream is = messageEntity.getContent();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String line;
            while ((line = br.readLine()) != null) {
                response.append(line);
            }
        }
    } catch (Exception e) {
        Log.e("demo", e.getMessage());
    }
    Log.d("demo", "Done with HTTP getting");
    return response.toString();
}

Le journal des prises me dit l'erreur:

Java.lang.SecurityException: Permission denied (missing INTERNET permission?)
libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
Permission denied (missing INTERNET permission?)

Dans mon manifeste, le jeu d'autorisations est le suivant:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="..." >

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

    <uses-permission Android:name="Android.permission.INTERNET" />
    <uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission Android:name="Android.permission.ACCESS_WIFI_STATE" />
    <uses-permission Android:name="Android.permission.CHANGE_WIFI_STATE" />
    <uses-permission Android:name="Android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />

    <uses-feature Android:name="Android.hardware.camera" Android:required="true" />

    <activity
        Android:name=".main"
        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>

18
user1878413

Avez-vous essayé de donner permission au-dessus de la balise application?

Vous devez vous occuper de order dans lequel les balises sont définies dans Manifest.xml.

Voir structure du manifeste.

Édité:

<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission Android:name="Android.permission.ACCESS_WIFI_STATE" />
<uses-permission Android:name="Android.permission.CHANGE_WIFI_STATE" />
<uses-permission Android:name="Android.permission.CHANGE_NETWORK_STATE" />
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />

<application
    ...>
</application>

Détails:

Ordre de définition des onglets dans Manifest:

  1. Les permissions
  2. Applications
  3. Récepteur, service, métadonnées
52
Nabin

Les autorisations doivent être en dehors de la balise d'application. Donc, vous devez déplacer vos autorisations à l'extérieur 

<uses-permission Android:name="Android.permission.INTERNET" />
    <uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission Android:name="Android.permission.ACCESS_WIFI_STATE" />
    <uses-permission Android:name="Android.permission.CHANGE_WIFI_STATE" />
    <uses-permission Android:name="Android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />

<application
    ... >
</application>

Lisez à propos de Structure du fichier manifeste. La syntaxe est 

<manifest>

    <uses-permission />

    <application>
        ....
    </application>

</manifest>
10
Pankaj Kumar

Permissions ne devrait pas être dans ApplicationTag .. vous devez le placer comme un enfant pour Manifest ..

3
Rajesh Mikkilineni

Placez votre étiquette d'autorisation d'utilisateur au-dessus de l'étiquette d'application. Lien: http://developer.Android.com/guide/topics/manifest/uses-feature-element.html

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="..." >
    <uses-permission Android:name="Android.permission.INTERNET" />
    <uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission Android:name="Android.permission.ACCESS_WIFI_STATE" />
    <uses-permission Android:name="Android.permission.CHANGE_WIFI_STATE" />
    <uses-permission Android:name="Android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />

    <uses-feature Android:name="Android.hardware.camera" Android:required="true" />

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


    <activity
        Android:name=".main"
        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>
2
Unii

Droite

<uses-permission/>
    <application/>

faux

<application>

<uses-permission/>
<application/>
1
Boopathi

Les autorisations doivent être un enfant direct des en-têtes du manifeste.

0
Cybs

Essaye ça Vous donnez la permission correcte mais les autorisations doivent être en dehors du étiquette d'application maintenir l'ordre pour l'étiquette 

  <manifest>
      <uses-permission />
      <application>
       ....
      </application>
      <receiver> </receiver>
      <service> </service>
</manifest>

your code is like this way

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="..." >

    <uses-permission Android:name="Android.permission.INTERNET" />
    <uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission Android:name="Android.permission.ACCESS_WIFI_STATE" />
    <uses-permission Android:name="Android.permission.CHANGE_WIFI_STATE" />
    <uses-permission Android:name="Android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
    <uses-feature Android:name="Android.hardware.camera" Android:required="true"/>

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

    <activity
        Android:name=".main"
        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> 
</manifest>
0
Pravin Fofariya