web-dev-qa-db-fra.com

SecurityException: autorisation refusée (autorisation INTERNET manquante?)

cette erreur est vraiment vraiment très étrange et je ne sais pas comment la reproduire ni la corriger car j'ai fait beaucoup de recherches mais rien n’était utile.

Voici le stacktrace:

Stack Trace
_________________________________
0   Java.lang.RuntimeException: An error occured while executing doInBackground()
1       at Android.os.AsyncTask$3.done(AsyncTask.Java:299)
2       at Java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.Java:273)
3       at Java.util.concurrent.FutureTask.setException(FutureTask.Java:124)
4       at Java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.Java:307)
5       at Java.util.concurrent.FutureTask.run(FutureTask.Java:137)
6       at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1076)
7       at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:569)
8       at Java.lang.Thread.run(Thread.Java:856)
9   Caused by: Java.lang.SecurityException: Permission denied (missing INTERNET permission?)
10      at Java.net.InetAddress.lookupHostByName(InetAddress.Java:430)
11      at Java.net.InetAddress.getAllByNameImpl(InetAddress.Java:236)
12      at Java.net.InetAddress.getAllByName(InetAddress.Java:214)
13      at libcore.net.http.HttpConnection.<init>(HttpConnection.Java:70)
14      at libcore.net.http.HttpConnection.<init>(HttpConnection.Java:50)
15      at libcore.net.http.HttpConnection$Address.connect(HttpConnection.Java:340)
16      at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.Java:87)
17      at libcore.net.http.HttpConnection.connect(HttpConnection.Java:128)
18      at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.Java:316)
19      at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.Java:461)
20      at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.Java:433)
21      at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.Java:290)
22      at libcore.net.http.HttpEngine.sendRequest(HttpEngine.Java:240)
23      at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.Java:292)
24      at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.Java:185)
25      at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.Java:271)
26      at com.designfuture.music.api.MusixMatchApi.sendRequestJSON(MusixMatchApi.Java:1143)
27      at com.designfuture.music.api.MusixMatchApi.handleRequestJSON(MusixMatchApi.Java:982)
28      at com.designfuture.music.api.MusixMatchApi.getConfig(MusixMatchApi.Java:211)
29      at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.Java:28)
30      at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.Java:1)
31      at Android.os.AsyncTask$2.call(AsyncTask.Java:287)
32      at Java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.Java:305)
33      ... 4 more
34  Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
35      at libcore.io.Posix.getaddrinfo(Native Method)
36      at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.Java:55)
37      at Java.net.InetAddress.lookupHostByName(InetAddress.Java:405)
38      ... 26 more
39  Caused by: libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied)
40      ... 29 more
41  Java.lang.SecurityException: Permission denied (missing INTERNET permission?)
42      at Java.net.InetAddress.lookupHostByName(InetAddress.Java:430)
43      at Java.net.InetAddress.getAllByNameImpl(InetAddress.Java:236)
44      at Java.net.InetAddress.getAllByName(InetAddress.Java:214)
45      at libcore.net.http.HttpConnection.<init>(HttpConnection.Java:70)
46      at libcore.net.http.HttpConnection.<init>(HttpConnection.Java:50)
47      at libcore.net.http.HttpConnection$Address.connect(HttpConnection.Java:340)
48      at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.Java:87)
49      at libcore.net.http.HttpConnection.connect(HttpConnection.Java:128)
50      at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.Java:316)
51      at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.Java:461)
52      at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.Java:433)
53      at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.Java:290)
54      at libcore.net.http.HttpEngine.sendRequest(HttpEngine.Java:240)
55      at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.Java:292)
56      at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.Java:185)
57      at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.Java:271)
58      at com.designfuture.music.api.MusixMatchApi.sendRequestJSON(MusixMatchApi.Java:1143)
59      at com.designfuture.music.api.MusixMatchApi.handleRequestJSON(MusixMatchApi.Java:982)
60      at com.designfuture.music.api.MusixMatchApi.getConfig(MusixMatchApi.Java:211)
61      at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.Java:28)
62      at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.Java:1)
63      at Android.os.AsyncTask$2.call(AsyncTask.Java:287)
64      at Java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.Java:305)
65      at Java.util.concurrent.FutureTask.run(FutureTask.Java:137)
66      at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1076)
67      at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:569)
68      at Java.lang.Thread.run(Thread.Java:856)
69  Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
70      at libcore.io.Posix.getaddrinfo(Native Method)
71      at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.Java:55)
72      at Java.net.InetAddress.lookupHostByName(InetAddress.Java:405)
73      ... 26 more
74  Caused by: libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied)
75      ... 29 more
76  libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
77      at libcore.io.Posix.getaddrinfo(Native Method)
78      at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.Java:55)
79      at Java.net.InetAddress.lookupHostByName(InetAddress.Java:405)
80      at Java.net.InetAddress.getAllByNameImpl(InetAddress.Java:236)
81      at Java.net.InetAddress.getAllByName(InetAddress.Java:214)
82      at libcore.net.http.HttpConnection.<init>(HttpConnection.Java:70)
83      at libcore.net.http.HttpConnection.<init>(HttpConnection.Java:50)
84      at libcore.net.http.HttpConnection$Address.connect(HttpConnection.Java:340)
85      at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.Java:87)
86      at libcore.net.http.HttpConnection.connect(HttpConnection.Java:128)
87      at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.Java:316)
88      at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.Java:461)
89      at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.Java:433)
90      at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.Java:290)
91      at libcore.net.http.HttpEngine.sendRequest(HttpEngine.Java:240)
92      at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.Java:292)
93      at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.Java:185)
94      at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.Java:271)
95      at com.designfuture.music.api.MusixMatchApi.sendRequestJSON(MusixMatchApi.Java:1143)
96      at com.designfuture.music.api.MusixMatchApi.handleRequestJSON(MusixMatchApi.Java:982)
97      at com.designfuture.music.api.MusixMatchApi.getConfig(MusixMatchApi.Java:211)
98      at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.Java:28)
99      at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.Java:1)
100     at Android.os.AsyncTask$2.call(AsyncTask.Java:287)
101     at Java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.Java:305)
102     at Java.util.concurrent.FutureTask.run(FutureTask.Java:137)
103     at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1076)
104     at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:569)
105     at Java.lang.Thread.run(Thread.Java:856)
106 Caused by: libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied)
107     ... 29 more
108 libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied)
109     at libcore.io.Posix.getaddrinfo(Native Method)
110     at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.Java:55)
111     at Java.net.InetAddress.lookupHostByName(InetAddress.Java:405)
112     at Java.net.InetAddress.getAllByNameImpl(InetAddress.Java:236)
113     at Java.net.InetAddress.getAllByName(InetAddress.Java:214)
114     at libcore.net.http.HttpConnection.<init>(HttpConnection.Java:70)
115     at libcore.net.http.HttpConnection.<init>(HttpConnection.Java:50)
116     at libcore.net.http.HttpConnection$Address.connect(HttpConnection.Java:340)
117     at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.Java:87)
118     at libcore.net.http.HttpConnection.connect(HttpConnection.Java:128)
119     at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.Java:316)
120     at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.Java:461)
121     at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.Java:433)
122     at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.Java:290)
123     at libcore.net.http.HttpEngine.sendRequest(HttpEngine.Java:240)
124     at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.Java:292)
125     at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.Java:185)
126     at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.Java:271)
127     at com.designfuture.music.api.MusixMatchApi.sendRequestJSON(MusixMatchApi.Java:1143)
128     at com.designfuture.music.api.MusixMatchApi.handleRequestJSON(MusixMatchApi.Java:982)
129     at com.designfuture.music.api.MusixMatchApi.getConfig(MusixMatchApi.Java:211)
130     at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.Java:28)
131     at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.Java:1)
132     at Android.os.AsyncTask$2.call(AsyncTask.Java:287)
133     at Java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.Java:305)
134     at Java.util.concurrent.FutureTask.run(FutureTask.Java:137)
135     at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1076)
136     at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:569)
137     at Java.lang.Thread.run(Thread.Java:856)

Voici mon AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="my_app_package"
    Android:installLocation="auto"
    Android:versionCode="my_version_code"
    Android:versionName="my_version_name" >

    <uses-sdk
        Android:minSdkVersion="8"
        Android:targetSdkVersion="16" />

    <supports-screens
        Android:anyDensity="true"
        Android:largeScreens="true"
        Android:normalScreens="true"
        Android:resizeable="true"
        Android:smallScreens="true"
        Android:xlargeScreens="true" />

    <uses-feature Android:glEsVersion="0x00010001" />

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

    <application
        Android:allowTaskReparenting="true"
        Android:debuggable="true"
        Android:icon="@drawable/mxm_icon"
        Android:label="@string/musicbrowserlabel"
        Android:theme="@style/Theme.Music" >

        <!-- MY ACTIVITIES -->



    </application>

</manifest>

S'il vous plaît ne prenez pas la peine de me demander si j'ai la bonne permission Internet dans mon manifeste car cette application est sur le marché depuis 2 ans: P

J'ai aussi remarqué que (de Crittercism) tous les bugs proviennent de la version Android 4.1.x (JB). Je ne sais pas si le périphérique est enraciné ou quoi (je ne peux pas voir cette information pour le moment)

83
StErMi

NOTE: J'ai écrit cette réponse en juin 2013, elle est donc un peu obsolète. Certaines choses ont changé dans Android depuis la version 6 (Marshmallow) de la plate-forme depuis lors, rendant le problème dans son ensemble est plus/moins obsolète de nos jours, mais je pense que cet article peut toujours valoir la peine d’être lu comme exemple général d’analyse du problème, donc j’espère que vous pourrez toujours le trouver éducatif.


L'exception que vous recevez (SecurityException: Permission denied (missing INTERNET permission?)) indique clairement que vous n'êtes pas autorisé à faire de la mise en réseau. C'est un fait assez indiscutable. Mais comment cela peut-il arriver? Cela est généralement dû à l'absence de l'entrée <uses-permission Android:name="Android.permission.INTERNET" /> dans votre fichier AndroidManifest.xml ou bien, étant donné que l'autorisation Internet est accordée à l'installation et non au moment de l'exécution, le bogue raté dans Android provoque l’installation de votre application, mais sans la permission d’attente prévue.

Mon manifeste est correct, alors comment cela peut-il se produire?

Théoriquement, la présence de uses-permission dans Manifest répond parfaitement à l'exigence et, du point de vue du développeur, il ne reste plus qu'à faire pour pouvoir créer des réseaux. De plus, étant donné que les autorisations sont affichées à l'utilisateur lors de l'installation, le fait que votre application soit installée sur le périphérique de l'utilisateur signifie qu'il a accordé ce que vous aviez demandé (sinon l'installation est annulée). Par conséquent, si votre code est exécuté, toutes les autorisations demandées sont valables. accordé est valide. Et une fois accordée, l'utilisateur ne peut pas révoquer l'autorisation autrement que de désinstaller complètement l'application, car le cadre standard Android (fourni par AOSP) n'offre aucune telle fonctionnalité pour le moment.

Mais les choses deviennent de plus en plus difficiles si votre application ne fonctionne pas non plus sur les appareils enracinés . Il existe des outils disponibles dans Google Play que vos utilisateurs peuvent installer pour contrôler les autorisations accordées aux applications installées au moment de l'exécution - par exemple: Autorisations refusées et autres. Cela peut également être fait avec CyanogenMod , marque du fournisseur (LG) ou autre ROM personnalisée , présentant divers types de "gestionnaires de la confidentialité" ou des outils similaires.

Donc, si l'application est bloquée d'une manière ou d'une autre, elle est fondamentalement bloquée intentionnellement par l'utilisateur et si c'est le cas, il s'agit vraiment d'un problème d'utilisateur dans ce cas (ou il/elle ne comprend pas ce que certaines options/outils font réellement et quelles en seraient les conséquences) que le vôtre, car le SDK standard (et la plupart des applications sont conçues dans cet esprit) ne se comporte tout simplement pas de cette façon. Donc, je fortement ​​doute que ce problème se produise sur un périphérique "standard", non enraciné avec un stock (ou un fournisseur tel que Samsung, HTC, Sony, etc.) ROM.

Je ne veux pas planter ...

La gestion des autorisations correctement mise en œuvre et le blocage/org doivent prendre en compte le fait que la plupart des applications ne sont peut-être pas prêtes pour la situation dans laquelle l'accès à certaines fonctionnalités est autorisé et inaccessible en même temps, car il s'agit d'une sorte de contradiction lorsqu'une application utilise demander l'accès au moment de l'installation. Le contrôle d’accès effectué correctement doit faire en sorte que tout fonctionne comme avant, tout en limitant la convivialité à l’aide de techniques qui cadrent avec le comportement attendu de la fonction. Par exemple, lorsque certaines autorisations sont accordées (GPS, accès Internet), une telle fonctionnalité peut être rendue disponible du point de vue de l'application/utilisateur (vous pouvez activer le GPS ou essayer de vous connecter), la nouvelle implémentation ne peut fournir aucune donnée réelle - C'est-à-dire que le GPS peut toujours ne renvoyer aucune coordonnée, comme lorsque vous êtes à l'intérieur ou que vous n'avez pas de "repère" satellite. L'accès à Internet peut être accordé comme avant, mais vous ne pouvez pas établir de connexion car il n'y a pas de couverture de données ni de routage. De tels scénarios devraient également être attendus dans des conditions normales d'utilisation et devraient donc déjà être gérés par les applications. Comme cela peut simplement se produire lors d'une utilisation quotidienne normale, toute panne dans une telle situation devrait probablement être liée à des bogues d'application.

Il nous manque trop d’informations sur l’environnement dans lequel ce problème se produit pour diagnostiquer le problème sans deviner, mais comme solution, vous pouvez envisager d’utiliser setDefaultUncaughtExceptionHandler () pour intercepter de telles exceptions inattendues à l’avenir, c.-à-d. affichez simplement les informations détaillées des utilisateurs sur les autorisations dont votre application a besoin au lieu de se bloquer. Veuillez noter que cette utilisation sera probablement en conflit avec des outils tels que Crittercism, ACRA et autres. Soyez donc prudent si vous utilisez l'un de ces outils.

Notes

Sachez que Android.permission.INTERNET n'est pas la seule autorisation de mise en réseau que vous devrez peut-être déclarer dans manifeste pour tenter de réussir la mise en réseau. L'obtention de l'autorisation INTERNET permet simplement aux applications d'ouvrir les sockets réseau (ce qui est fondamentalement une exigence fondamentale pour tout transfert de données réseau). Mais si votre pile/bibliothèque réseau souhaite également obtenir des informations sur les réseaux, vous aurez également besoin de Android.permission.ACCESS_NETWORK_STATE dans votre manifeste (c’est-à-dire requis par HttpUrlConnection client ( voir tutoriel ).


Addendum (2015-07-16)

Veuillez noter que Android 6 (alias Marshmallow) a introduit un tout nouveau mécanisme de gestion des autorisations appelé Autorisations d'exécution. Il donne à l'utilisateur plus de contrôle sur les autorisations accordées (autorise également l'attribution sélective) ou permet de révoquer les autorisations déjà accordées sans besoin de supprimer l'application:

Cela introduit un [...] nouveau modèle d'autorisations, dans lequel les utilisateurs peuvent désormais gérer directement les autorisations des applications au moment de l'exécution. Ce modèle offre aux utilisateurs une visibilité et un contrôle améliorés sur les autorisations, tout en rationalisant les processus d'installation et de mise à jour automatique pour les développeurs d'applications. Les utilisateurs peuvent accorder ou révoquer des autorisations individuellement pour les applications installées.

Toutefois, les modifications n'affectent pas les autorisations INTERNET ou ACCESS_NETWORK_STATE, qui sont considérées comme des autorisations "normales". L'utilisateur n'a pas besoin d'accorder explicitement ces autorisations.

Voir description du changement de comportement page pour plus de détails et assurez-vous que votre application se comportera correctement sur les nouveaux systèmes. Cela est particulièrement important lorsque votre projet définit targetSdk sur au moins 23, car vous devez gérer un nouveau modèle de permissions ( documentation détaillée ). Si vous n'êtes pas prêt, assurez-vous de garder targetSdk au plus 22, car cela garantit que même les nouveaux Android utiliseront l'ancien système de permission lors de l'installation de votre application.

114
Marcin Orlowski

Android Studio 1.3b1 (je ne suis pas sûr des autres versions) a complété automatiquement mon autorisation Internet pour Android.PERMISSION.INTERNET. Le changer en Android.permission.INTERNET corrige le problème.

33
Tom

Assurez-vous que l'endroit où vous ajoutez 

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

est juste.

Vous devriez l'écrire comme ça dans AndroidManifest.xml:

<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="com.project"> 
<uses-permission Android:name="Android.permission.INTERNET"/>

Ne fais pas mes erreurs :)

32
Valeria

Ajoutez au fichier manifeste la ligne:

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

Cela a résolu le problème pour moi.

29
Dashtank

J'ai résolu cette erreur, j'ai ajouté des autorisations à l'intérieur du tag Application par erreur. J'ai mis dehors et ça marche bien. J'espère que ça aide pour quelqu'un.

20
Sami

J'ai aussi eu ce problème. C'était bizarre que cela fonctionne sur mon émulateur Lollipop, mais pas sur mon appareil KitKat actuel.

Android Studio va maintenant vous obliger à écrire l'autorisation en majuscule, et c'est le problème.

Ajouter

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

Au-dessus de l'onglet de l'application, cela fonctionnera.

15
Boldijar Paul

Ecrivez votre permission avant l'étiquette d'application comme indiqué ci-dessous.

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

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

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

Mettez cette permission en dehors de la balise <application> préférable avant la balise, je l'ai essayée et cela fonctionne pour moi.

<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE"/>
5
Tobore Igbe

s'il s'agissait d'une adresse IPv6, examinez ceci: https://code.google.com/p/Android/issues/detail?id=33046

On dirait qu'il y avait un bug dans Android qui a été corrigé dans la version 4.3 (?).

3
Benjamin Foster

Tout comme Tom mentionné. Lorsque vous commencez avec une majuscule A, la saisie semi-automatique le complète.

Android.PERMISSION.INTERNET

Lorsque vous commencez à taper avec a, la saisie semi-automatique le complète en tant que

Android.permission.INTERNET

Le second est le bon.

3
Shakti

C'est un type de bug très déroutant. Il pourrait y avoir plusieurs raisons:

  1. Vous ne mentionnez pas les autorisations au bon endroit. Comme juste au-dessus de l'application.
  2. Vous n'utilisez pas de petites lettres.
  3. Dans certains cas, vous devez également ajouter une autorisation d'état du réseau.
  4. Dans mon cas, il y a des lignes vierges dans les lignes de manifeste. Comme s'il pouvait y avoir une ligne vide entre l'étiquette d'autorisation et la ligne d'application. Supprimez-les et vous avez terminé. J'espère que ça va aider
0
Shami

Je passe des heures à chercher une solution à ce problème et aucune des solutions proposées n’a fonctionné. Ensuite, j'ai découvert que j'avais accidentellement ajouté un espace lors de la saisie semi-automatique entre Android.permission.INTERNET et ".

0
a2en