SecurityException: Permiso denegado (¿permiso de Internet perdido?)

Este error es realmente muy extraño y no sé cómo reproducirlo y cómo solucionarlo porque hice un montón de búsquedas, pero nada fue útil.

Aquí está el 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) 

Aquí está mi 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> 

Por favor, no se moleste en preguntarme si tengo el permiso correcto de Internet en mi manifiesto porque esta aplicación está en el mercado desde hace 2 años: P

También he notado que (desde Crittercism) todos los errores vienen de Android 4.1.x versión (JB). No sé si el dispositivo está arraigado o qué (no puedo ver esta información por el momento)

NOTA: Escribí esta respuesta en junio de 2013, por lo que ahora es un poco anticuado. Algunas cosas han cambiado en la plataforma Android desde entonces también, por lo que todo el problema más / menos obsoletos en la actualidad, sin embargo, creo que este puesto todavía puede ser digno de lectura como útil e informativo como estudio de caso y análisis de problemas en general.


Excepción que está recibiendo ( SecurityException: Permission denied (missing INTERNET permission?) ), Indica claramente que no se le permite hacer redes. Eso es un hecho bastante indiscutible. Pero, ¿cómo puede suceder esto? Por lo general, es debido a la falta <uses-permission android:name="android.permission.INTERNET" /> entrada en su archivo AndroidManifest.xml o, como se concede permiso de Internet en la instalación no en tiempo de ejecución, En el marco de Android que hace que su aplicación se instale correctamente, pero sin la concesión de permiso esperado.

Mi Manifiesto es correcto, ¿cómo puede suceder esto?

Teóricamente, la presencia de uses-permission en Manifest cumple perfectamente con el requisito y desde el punto de vista del desarrollador es todo lo que se necesita hacer para poder hacer networking. Por otra parte, dado que los permisos se muestran al usuario durante la instalación, el hecho de que su aplicación terminó instalado en el dispositivo del usuario significa que él / ella concedió lo que usted pidió (de lo contrario la instalación se cancela), asumiendo que si su código se ejecuta, Concedido es válido. Y una vez concedido, el usuario no puede revocar el permiso de otra manera que desinstalar la aplicación completamente como el marco estándar de Android (de AOSP) no ofrece tal característica en este momento.

Pero las cosas son cada vez más difícil si también no les importa su aplicación que se ejecuta en los dispositivos de raíz también. Existen herramientas disponibles en Google Play que los usuarios pueden instalar para controlar el permiso concedido a las aplicaciones instaladas en tiempo de ejecución , por ejemplo: permisos denegados y otros. Esto también se puede hacer con CyanogenMod , marca de fábrica del vendedor (es decir LG) u otra ROM de encargo , ofreciendo diverso tipo de "encargados de la aislamiento" o de herramientas similares.

Así que si la aplicación está bloqueada de cualquier manera, es básicamente bloqueado intencionalmente por el usuario y si es así, es realmente más problema de usuario en este caso (o s / he no entiendo lo que ciertas opciones / herramientas realmente hacer y cuáles serían las consecuencias) Porque el SDK estándar (y la mayoría de las aplicaciones están escritas con ese SDK en mente) simplemente no se comportan de esa manera. Por lo tanto , dudo mucho que este problema se produzca en "estándar", dispositivo no enraizado con stock (o proveedor como Samsung, HTC, Sony etc) ROM.

No quiero estrellarme …

La administración de permisos correctamente implementada y / o el bloqueo de org debe hacer frente al hecho de que la mayoría de las aplicaciones pueden no estar listas para la situación en la que el acceso a ciertas características es concedido, pero no accesible, ya que esto es una especie de contradicción. . El control de acceso correcto debe hacer que todas las cosas funcionen como antes, pero limitar la usabilidad de la característica dentro del alcance de las actividades normales. Por ejemplo, cuando se concede una función determinada (por ejemplo, GPS, acceso a Internet), puede estar disponible desde la perspectiva de la aplicación o del usuario, pero no proporciona datos reales, es decir, GPS siempre puede devolver ningún código, como cuando está en interiores o no tiene " ". El acceso a Internet se concede como antes, pero no puede realizar ninguna conexión correcta ya que no hay cobertura de datos. Tales escenarios deben ser esperados y ser manejados por app ya como esto simplemente puede suceder durante el uso normal de todos los días por lo que cualquier accidente en tal situación debe ser considerado como un error de aplicación.

Nos falta mucha información sobre el entorno en el que se produce este problema para diagnosticar el problema sin adivinar, pero como tipo de solución, puede considerar el uso de setDefaultUncaughtExceptionHandler () para capturar tales excepciones inesperadas en el futuro y es decir, simplemente mostrar al usuario información detallada qué permiso Su aplicación necesita en lugar de simplemente estrellarse. Tenga en cuenta que el uso de este conflicto muy probablemente con herramientas como Crittercism, ACRA y otros, así que tenga cuidado si utiliza cualquiera de estos.

Notas

Tenga en cuenta que android.permission.INTERNET no es el único permiso relacionado con la red que puede necesitar para declarar en el manifiesto en el intento de realizar correctamente la creación de redes. Tener el permiso de INTERNET concedido simplemente permite que las aplicaciones abran sockets de red (que es básicamente requisito fundamental para hacer cualquier transferencia de datos de red). Pero en caso de que su red de pila / biblioteca también desea obtener información sobre las redes, también necesitará android.permission.ACCESS_NETWORK_STATE en su Manifiesto (es decir, requerido por el cliente HttpUrlConnection ).

Addendum (2015-07-16)

Tenga en cuenta que Android 6 (alias Marshmallow) introdujo completamente nuevo mecanismo de gestión de permisos llamado permisos de tiempo de ejecución . Le da al usuario más control sobre qué permiso se otorga (también permite la concesión selectiva) o permite revocar los permisos ya concedidos sin necesidad de remover la aplicación:

Esto introduce […] un nuevo modelo de permisos, donde los usuarios pueden administrar directamente los permisos de la aplicación en tiempo de ejecución. Este modelo ofrece a los usuarios una mejor visibilidad y control sobre los permisos, al tiempo que simplifica los procesos de instalación y actualización automática de los desarrolladores de aplicaciones. Los usuarios pueden conceder o revocar permisos individualmente para las aplicaciones instaladas.

Consulte la página de descripción de cambios de comportamiento para obtener detalles y asegúrese de que su aplicación se comportará correctamente en los sistemas más nuevos también. Es especialmente importante cuando el proyecto establece targetSdk a por lo menos 23 como entonces debe soportar el nuevo modelo de permisos ( documentación detallada ). Si no está listo, asegúrese de mantener targetSdk como máximo 22 ya que esto garantiza que hasta el nuevo Android utilice el sistema de permisos antiguo cuando su aplicación esté instalada.

Android Studio 1.3b1 (no estoy seguro acerca de otras versiones) autocompletado mi permiso de internet a ANDROID.PERMISSION.INTERNET . Cambiarlo a android.permission.INTERNET solucionó el problema.

Añadir al archivo de manifiesto la línea:

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

Lo arregló para mí.

Resolví este error, yo estaba agregando permisos dentro de la etiqueta de la aplicación por error. Puse fuera y funciona bien. Espero que ayude para alguien.

Asegúrese de que el lugar donde agrega

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

es correcto.

Deberías escribirlo así en AndroidManifest.xml:

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

No cometas mis errores 🙂

Yo también tuve este problema. Era raro que funcionara en mi emulador de piruletas, pero no en mi dispositivo kitkat real.

Android Studio ahora le obligará a escribir el permiso en mayúsculas, y ese es el problema.

Añadir

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

Por encima de la pestaña de la aplicación y funcionará.

Ponga este permiso fuera de la etiqueta <application> preferible antes de la etiqueta, lo probé y funciona para mí.

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

Escriba su permiso antes de la etiqueta de la aplicación como se indica a continuación.

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

Si se trata de una dirección IPv6, consulte esto: https://code.google.com/p/android/issues/detail?id=33046

Parece que hubo un error en Android que se corrigió en 4.3 (?).

Justo como Tom lo mencionó. Cuando comience con el capital A entonces el autocompletado lo completará como.

 ANDROID.PERMISSION.INTERNET 

Cuando comience a escribir con a autocompletar, se completará como

 android.permission.INTERNET 

La segunda es la correcta.

Bueno, es un tipo de error muy confuso. Podría haber muchas razones:

  1. Usted no está mencionando los permisos en el lugar correcto. Como justo encima de la aplicación.
  2. No está usando letras pequeñas.
  3. En algunos casos, también tiene que agregar permiso de estado de red.
  4. Uno que era mi caso, hay algunas líneas en blanco en líneas manifiestas. Como si hubiera una línea en blanco entre la etiqueta de permiso y la línea de aplicación. Eliminarlos y ya está. Espero que ayude

Eliminar esto en su archivo de manifiesto

  xmlns:tools="http://schemas.android.com/tools" 
  • Analizar xml de la respuesta httppost
  • El tiempo de espera de conexión HTTP no funciona
  • ¿Es posible tener un MultipartEntities anidado o FormBodyPart en un POST de varias partes?
  • ¿Qué es el error Apache-HttpClient / UNAVAILABLE (Android, Google App Engine)?
  • ¿Cómo cancelo una solicitud de http de Android?
  • Cómo proteger url webservice en el archivo android apk
  • ¿Detectar si url especificada es una imagen en Android?
  • Obtener el cuerpo de respuesta de HttpResponse
  • Buscando retroalimentación técnica en Nextreaming NexPlayer ™
  • ¿Puedo configurar el tiempo de espera de getaddrinfo en Android para DefaultHttpClient?
  • Force Gradle para usar HTTP en lugar de HTTPS
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.