SecurityException: Permiso denegado (¿falta el permiso de INTERNET?)

92

este error es realmente realmente extraño y no sé cómo reproducirlo y cómo solucionarlo porque hice muchas 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 de INTERNET correcto en mi manifiesto porque esta aplicación está en el mercado desde hace 2 años: P

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

StErMi
fuente
¿Es posible que el nombre de host haya cambiado (debido a este mensaje de error): No hay dirección asociada con el nombre de host
Opiatefuchs
¿Probaste con diferentes versiones del dispositivo? o subiendo a cada versión?
Pankaj Kumar
1
por favor agregue <uses-allow android: name = "android.permission.INTERNET" /> <uses-allow android: name = "android.permission.ACCESS_NETWORK_STATE" /> etiqueta externa <Application> Por favor, reconstruya su proyecto y ejecútelo. Funcionó para mí
Azahar
Por cierto, el orden importa, stackoverflow.com/questions/25135595/…
Nabin
@SteErMi, ¿ha resuelto este problema? Me enfrento a la misma situación
Ravind Maurya

Respuestas:

118

NOTA: Escribí esta respuesta en junio de 2013, por lo que hoy en día está un poco anticuada. Muchas cosas cambiaron en la plataforma Android desde la versión 6 (Marshmallow), haciendo que todo el problema sea más / menos obsoleto hoy en día. Sin embargo, creo que vale la pena leer esta publicación como ejemplo de enfoque de análisis de problemas generales.


La excepción que obtiene ( SecurityException: Permission denied (missing INTERNET permission?)) indica claramente que no está autorizado a trabajar en red. Ese es un hecho bastante indiscutible. Pero, ¿cómo puede suceder esto? Por lo general, se debe a que falta una <uses-permission android:name="android.permission.INTERNET" />entrada en su AndroidManifest.xmlarchivo o, dado que el permiso de Internet se otorga en la instalación, no en el tiempo de ejecución, por un error perdido de larga data en el marco de Android que hace que su aplicación se instale correctamente, pero sin la concesión de permiso esperada.

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

Teóricamente, la presencia de uses-permissionen Manifest cumple perfectamente con el requisito y, desde el punto de vista del desarrollador, es todo lo que se necesita para poder trabajar en red. Además, dado que los permisos se muestran al usuario durante la instalación, el hecho de que su aplicación termine instalada en el dispositivo del usuario significa que él / ella otorgó lo que solicitó (de lo contrario, la instalación se cancela), así que suponga que si su código se ejecuta, entonces todos los permisos solicitados son concedido es válido. Y una vez otorgado, el usuario no puede revocar el permiso de otra manera que desinstalar la aplicación por completo, ya que el marco estándar de Android (de AOSP) no ofrece tal característica en este momento.

Pero las cosas se ponen más complicadas si tampoco le importa que su aplicación se ejecute en dispositivos rooteados . Hay herramientas disponibles en Google Play que sus usuarios pueden instalar para controlar el permiso otorgado a las aplicaciones instaladas en tiempo de ejecución , por ejemplo: Permisos denegados y otros. Esto también se puede hacer con CyanogenMod , la marca del proveedor (es decir, LG) u otra ROM personalizada , con varios tipos de "administradores de privacidad" o herramientas similares.

Entonces, si la aplicación está bloqueada de cualquier manera, básicamente es bloqueada intencionalmente por el usuario y, de ser así, es realmente un problema mayor para el usuario en este caso (o él / ella no entiende qué hacen realmente ciertas opciones / herramientas y cuáles serían las consecuencias) que el tuyo, porque el SDK estándar (y la mayoría de las aplicaciones están escritas con ese SDK en mente) simplemente no se comporta de esa manera. Por lo tanto , dudo mucho que este problema ocurra en un dispositivo "estándar" no rooteado con ROM estándar (o de un proveedor como Samsung, HTC, Sony, etc.).

No quiero chocar ...

La administración de permisos y el bloqueo de organizaciones correctamente implementados deben lidiar con el hecho de que la mayoría de las aplicaciones pueden no estar listas para la situación en la que el acceso a ciertas funciones se otorga y no se puede acceder al mismo al mismo tiempo, ya que esto es una especie de contradicción cuando la aplicación usa manifiesto para solicitar acceso en el momento de la instalación. El control de acceso bien hecho debe hacer que todas las cosas funcionen como antes, y aún así limitar la usabilidad usando técnicas en el alcance del comportamiento esperado de la característica. Por ejemplo, cuando se otorga cierto permiso (es decir, GPS, acceso a Internet), dicha función puede estar disponible desde la perspectiva de la aplicación / usuario (es decir, puede encender el GPS o intentar conectarse), la implementación alterada no puede proporcionar datos reales: es decir, el GPS siempre puede no devolver coordenadas, como cuando estás en interiores o no tienes "fijo" de satélite. El acceso a Internet se puede otorgar como antes, pero no puede realizar una conexión exitosa ya que no hay cobertura de datos ni enrutamiento. Estos escenarios también deben esperarse en el uso normal, por lo tanto, las aplicaciones ya deben manejarlos. Como esto simplemente puede suceder durante el uso diario normal, cualquier bloqueo en tal situación probablemente debería estar relacionado con errores de la aplicación.

Carecemos de demasiada 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 usar setDefaultUncaughtExceptionHandler () para detectar tales excepciones inesperadas en el futuro y es decir, simplemente mostrar información detallada del usuario qué permiso su aplicación necesita en lugar de simplemente fallar. Tenga en cuenta que el uso de esto probablemente entrará en conflicto con herramientas como Crittercism, ACRA y otras, así que tenga cuidado si usa alguna de estas.

Notas

Tenga en cuenta que android.permission.INTERNETno es el único permiso relacionado con la red que puede necesitar declarar en el manifiesto para intentar establecer una red con éxito. Tener INTERNETpermiso otorgado simplemente permite que las aplicaciones abran sockets de red (que es un requisito fundamental para realizar cualquier transferencia de datos de red). Pero en caso de que su pila / biblioteca de red también desee obtener información sobre redes, también necesitará android.permission.ACCESS_NETWORK_STATEen su Manifiesto (es decir, requerido por el cliente HttpUrlConnection ( ver tutorial ).


Anexo (2015-07-16)

Tenga en cuenta que Android 6 (también conocido como Marshmallow) introdujo un mecanismo de administración de permisos completamente nuevo llamado Permisos en tiempo de ejecución . Le da al usuario más control sobre qué permisos se otorgan (también permite la concesión selectiva) o permite revocar permisos ya otorgados sin necesidad de eliminar la aplicación:

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

Sin embargo, los cambios no afectan INTERNETo ACCESS_NETWORK_STATEpermisos, que son considerados permisos "normal". El usuario no necesita otorgar explícitamente estos permisos.

Consulte la página de descripción de cambios de comportamiento para obtener detalles y asegúrese de que su aplicación también se comporte correctamente en los sistemas más nuevos. Es especialmente importante cuando su proyecto se establece targetSdkal menos 23como entonces debe admitir un nuevo modelo de permisos ( documentación detallada ). Si no está listo, asegúrese de mantenerlo como targetSdkmáximo, 22ya que esto asegura que incluso el nuevo Android usará el sistema de permisos anterior cuando se instale su aplicación.

Marcin Orlowski
fuente
Esto claramente significa que no se le permite hacer networking. O no se solicita en Manifest o no se otorga por la plataforma (lo que se puede hacer, es decir, en dispositivos rooteados).
Marcin Orlowski
2
Voto a favor esta respuesta para deshacer el voto en contra de otra persona. Al principio pensé que de hecho no habías leído toda la pregunta y solo querías ser rápido (por cierto, tu respuesta era realmente demasiado corta al principio ;-)), pero creo que el comentario sobre los usuarios (en dispositivos rooteados) poder frustrar sus solicitudes de permiso fue una buena idea.
baske el
Mmmm, así que si esto es de un usuario rooteado que está quitando permisos, tengo 2 preguntas: 1) ¿Cómo puedo saber si no tengo ese permiso? 2) ¿Cómo puedo volver a preguntar? (aún así, no sé si estamos hablando de este tipo de problema)
StErMi
No puede volver a solicitarlo, porque este permiso no se otorga en tiempo de ejecución. Ver respuesta editada para una posible "solución"
Marcin Orlowski
1
Lo mismo aquí: estaba a punto de degradar, pero la segunda parte de la respuesta parece ser la parte que vale la pena leer :) debe eliminar las primeras líneas de las respuestas ya que StErMi mostró claramente que había establecido el permiso de INTERNET.
Thierry
43

Asegúrese de que el lugar donde está agregando

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

Valeria
fuente
33

Android Studio 1.3b1 (no estoy seguro de otras versiones) completó automáticamente mi permiso de Internet para ANDROID.PERMISSION.INTERNET. Cambiarlo para android.permission.INTERNETsolucionar el problema.

Tom
fuente
Esto ahora debería arreglarse en Android Studio 1.4 RC 1 (actualmente en el canal Canary).
Tom
30

Agregue al archivo de manifiesto la línea:

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

Me lo arregló.

Dashtank
fuente
20

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

Sami
fuente
16

Yo también tuve este problema. era extraño que funcionara en mi emulador de piruletas, pero no en mi dispositivo kitkat real.

Android Studio ahora te 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"/>

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

Pablo Boldijar
fuente
Esta es la respuesta simple y correcta. ¡Y debería ser el que esté arriba!
Kostanos
13

Escriba su permiso antes de la etiqueta de solicitud 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">
arango_86
fuente
Esto fue en realidad lo único que me ayudó :( No es nada intuitivo.
Ivan Perez
4

Ponga estos permisos fuera de la <application>etiqueta preferiblemente 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"/>
Tobore Igbe
fuente
2

Como mencionó Tom. Cuando empiece con capital A, la función de autocompletar lo completará como.

ANDROID.PERMISSION.INTERNET

Cuando comience a escribir con a, la función de autocompletar lo completará como

android.permission.INTERNET

El segundo es el correcto.

Shakti
fuente
2

Pasé horas buscando una solución a este problema y ninguna de las soluciones en las respuestas funcionó. Luego descubrí que accidentalmente agregué un espacio durante el autocompletado entre android.permission.INTERNETy"

a0x2
fuente
0

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

  1. No menciona los permisos en el lugar correcto. Como justo encima de la aplicación.
  2. No está utilizando letras pequeñas.
  3. En algunos casos, también debe agregar el permiso de estado de la red.
  4. Uno que fue mi caso, hay algunas líneas en blanco en las líneas de manifiesto. Como si hubiera una línea en blanco entre la etiqueta de permiso y la línea de solicitud. Quítelos y listo. Espero que ayude
Shami
fuente
-7

eliminar esto en su archivo de manifiesto

 xmlns:tools="http://schemas.android.com/tools"
jiangyongyuan
fuente
No existe tal código en el archivo de manifiesto (AndroidManifest.xml) en la pregunta.
Pang