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

Cette erreur est vraiment vraiment très étrange et je ne sais pas comment le reproduire et comment le réparer car j’ai fait beaucoup de recherches mais rien n’était utile.

Voici la 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.(HttpConnection.java:70) 14 at libcore.net.http.HttpConnection.(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.(HttpConnection.java:70) 46 at libcore.net.http.HttpConnection.(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.(HttpConnection.java:70) 83 at libcore.net.http.HttpConnection.(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.(HttpConnection.java:70) 115 at libcore.net.http.HttpConnection.(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

           

S’il vous plaît ne vous embêtez pas à me demander si j’ai la permission INTERNET correcte dans mon manifeste parce que cette application est sur le marché depuis 2 ans: P

J’ai également remarqué (depuis Crittercism) que tous les bogues proviennent de la version Android 4.1.x (JB). Je ne sais pas si l’appareil est enraciné ou quoi (je ne peux pas voir cette information pour le moment)

NOTE: J’ai écrit cette réponse en juin 2013, donc c’est maintenant un peu daté. Certaines choses ont changé depuis Android depuis la version 6 (Marshmallow) de la plate-forme, rendant le problème plus / moins obsolète de nos jours. Cependant, je pense que cet article peut encore être lu comme exemple d’parsing générale des problèmes, alors j’espère que vous pourrez toujours le trouver éducatif.


Exception que vous obtenez ( SecurityException: Permission denied (missing INTERNET permission?) ), Indique clairement que vous n’êtes pas autorisé à faire du réseautage. C’est un fait indiscutable. Mais comment cela peut-il arriver? Il est généralement dû à l’absence de l’entrée dans votre fichier AndroidManifest.xml ou, à mesure que l’autorisation Internet est accordée lors de l’installation, au moment de l’exécution. dans le cadre Android qui a réussi à installer votre application, mais sans octroi d’autorisation prévu.

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

Théoriquement, la présence des uses-permission d’ uses-permission dans Manifest répond parfaitement à l’exigence et, du sharepoint vue du développeur, tout ce qu’il faut faire pour pouvoir faire du réseautage. De plus, comme les permissions sont affichées à l’utilisateur lors de l’installation, le fait que votre application se soit installée sur le périphérique de l’utilisateur signifie qu’il a accordé ce que vous demandiez (sinon, l’installation est annulée). accordé est valide. Et une fois accordée, l’utilisateur ne peut pas révoquer la permission autrement que de désinstaller complètement l’application, car le framework Android standard (de AOSP) n’offre pas cette fonctionnalité pour le moment.

Mais les choses deviennent plus compliquées si votre application ne tourne pas non plus sur des périphériques rootés. Il existe des outils disponibles dans Google Play que vos utilisateurs peuvent installer pour contrôler les permissions 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 de fournisseur (c.-à-d. De LG) ou autre ROM personnalisée , mettant en vedette différents types de “gestionnaires de la confidentialité” ou des outils similaires.

Donc, si l’application est bloquée de toute façon, elle est bloquée intentionnellement par l’utilisateur et si c’est le cas, c’est vraiment plus problématique pour l’utilisateur dans ce cas (ou il ne comprend pas ce que font certaines options / outils et quelles en seraient les conséquences) que le vôtre, car le SDK standard (et la plupart des applications sont conçues pour ce SDK) ne se comporte tout simplement pas de cette façon. Je doute donc fortement que ce problème se produise sur un appareil “standard”, non rooté, avec un stock (ou un fournisseur comme Samsung, HTC, Sony, etc.) ROM.

Je ne veux pas tomber en panne …

La gestion des permissions et / ou le blocage des organisations correctement mis en œuvre doivent tenir compte du fait que la plupart des applications ne sont pas prêtes à accéder à certaines fonctionnalités, ce qui constitue une contradiction lorsque demander l’access au moment de l’installation. Le contrôle d’access effectué correctement doit faire en sorte que tout fonctionne comme avant, tout en limitant la facilité d’utilisation en utilisant des techniques dans la scope du comportement attendu de la fonctionnalité. Par exemple, lorsque certaines permissions sont accordées (GPS, access Internet), cette fonctionnalité peut être mise à disposition du sharepoint vue de l’application / de l’utilisateur (vous pouvez activer le GPS ou essayer de vous connecter), c’est-à-dire que le GPS ne peut toujours pas renvoyer de coordonnées, comme lorsque vous êtes à l’intérieur ou que vous n’avez pas de “réparation” par satellite. L’access à Internet peut être accordé comme précédemment, 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 être attendus dans une utilisation normale, par conséquent, ils devraient déjà être gérés par les applications. Comme cela peut se produire tout au long de l’utilisation normale de tous les jours, tout plantage dans une telle situation devrait très probablement être lié à des bogues d’application.

Nous manquons trop d’informations sur l’environnement sur lequel ce problème survient pour diagnostiquer un problème sans deviner, mais en guise de solution, vous pouvez envisager d’utiliser setDefaultUncaughtExceptionHandler () pour détecter des exceptions inattendues. votre application a besoin au lieu de simplement planter. S’il vous plaît noter que l’utilisation de ceci sera très probablement en conflit avec des outils tels que Crittercism, ACRA et autres, alors soyez prudent si vous utilisez l’un de ceux-ci.

Remarques

Sachez que android.permission.INTERNET n’est pas la seule autorisation liée à la mise en réseau que vous devrez peut-être déclarer dans le manifeste pour tenter de réussir la mise en réseau. Avoir l’autorisation INTERNET accordée permet simplement aux applications d’ouvrir des sockets réseau (ce qui est fondamentalement indispensable pour effectuer tout transfert de données réseau). Mais si votre stack / 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 (requirejs par le client HttpUrlConnection ( voir tutoriel )).


Addendum (2015-07-16)

Veuillez noter que Android 6 (aka Marshmallow) a introduit un tout nouveau mécanisme de gestion des permissions appelé Autorisations d’exécution . Il donne à l’utilisateur plus de contrôle sur les permissions accordées (permet également l’octroi sélectif) ou permet de révoquer les permissions déjà accordées sans avoir à supprimer l’application:

Cela introduit un nouveau […] modèle d’permissions, dans lequel les utilisateurs peuvent désormais gérer directement les permissions des applications au moment de l’exécution. Ce modèle offre aux utilisateurs une visibilité et un contrôle améliorés des permissions, 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 permissions individuellement pour les applications installées.

Toutefois, les modifications n’affectent pas les permissions INTERNET ou ACCESS_NETWORK_STATE , qui sont considérées comme des permissions “normales”. L’utilisateur n’a pas besoin d’accorder explicitement cette autorisation.

Consultez la page de description des changements de comportement pour plus de détails et assurez-vous que votre application se comportera correctement sur les nouveaux systèmes. C’est particulièrement important lorsque votre projet définit targetSdk à au moins 23 car vous devez alors prendre en charge un nouveau modèle d’permissions ( documentation détaillée ). Si vous n’êtes pas prêt, assurez-vous de garder targetSdk au maximum 22 car cela garantit que même les nouveaux systèmes Android utiliseront l’ancien système d’autorisation lorsque votre application sera installée.

Android Studio 1.3b1 (pas sûr des autres versions) ANDROID.PERMISSION.INTERNET automatiquement mon autorisation Internet sur ANDROID.PERMISSION.INTERNET . Le changement en android.permission.INTERNET résolu le problème.

Ajoutez au fichier manifeste la ligne:

  

Il l’a réparé pour moi.

Assurez-vous que l’endroit où vous ajoutez

  

est correct.

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

   

Ne fais pas mes erreurs 🙂

J’ai résolu cette erreur, j’ajoutais des permissions à l’intérieur de la balise Application par erreur. J’ai mis dehors et ça marche bien. J’espère que ça aide pour quelqu’un.

J’ai aussi eu ce problème. C’était bizarre que cela fonctionne sur mon émulateur de sucette, mais pas sur mon appareil kitkat.

Android Studio va maintenant vous obliger à écrire la majuscule d’autorisation, et c’est le problème.

Ajouter

   

Au-dessus de l’onglet Application, cela fonctionnera.

Mettez cette permission en dehors de la préférence avant la balise, je l’ai essayée et cela fonctionne pour moi.

   

Ecrivez votre autorisation avant la balise d’application comme indiqué ci-dessous.

     

S’il s’agissait d’une adresse IPv6, consultez 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 4.3 (?).

Tout comme Tom l’a mentionné. Lorsque vous commencez avec un capital A saisie semi-automatique le complétera comme.

 ANDROID.PERMISSION.INTERNET 

Lorsque vous commencez à taper avec a saisie automatique, elle se terminera comme

 android.permission.INTERNET 

Le second est le bon.

C’est un genre de bogue très déroutant. Il pourrait y avoir plusieurs raisons:

  1. Vous ne mentionnez pas les permissions au bon endroit. Comme au dessus de l’application.
  2. Vous n’utilisez pas de petites lettres.
  3. Dans certains cas, vous devez également append une autorisation d’état du réseau.
  4. Un qui était mon cas, il y a des lignes vierges dans les lignes manifestes. Comme il pourrait y avoir une ligne vide entre l’étiquette de permission et la ligne d’application. Retirez-les et vous avez terminé. J’espère que ça aidera