SecurityException: autorizzazione negata (autorizzazione INTERNET mancante?)


92

questo errore è davvero davvero molto strano e non so come riprodurlo e come risolverlo perché ho fatto molte ricerche ma niente è stato utile.

Ecco lo 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)

Ecco il mio 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>

Per favore, non preoccuparti di chiedermi se ho l'autorizzazione INTERNET corretta nel mio manifest perché questa app è sul mercato da 2 anni: P

Ho anche notato che (da Crittercism) tutti i bug provengono dalla versione Android 4.1.x (JB). Non so se il dispositivo è rootato o cosa (non riesco a vedere queste informazioni per il momento)


è possibile che il nome host sia cambiato (a causa di questo messaggio di errore): Nessun indirizzo associato al nome host
Opiatefuchs

hai provato con diverse versioni del dispositivo? o salire su ogni versione?
Pankaj Kumar

1
plz aggiungi <uses-permission android: name = "android.permission.INTERNET" /> <uses-permission android: name = "android.permission.ACCESS_NETWORK_STATE" /> Outside <Application> tag Per favore ricostruisci il tuo progetto ed esegui. ha funzionato per me
Azahar

Con le questioni di ordine modo, stackoverflow.com/questions/25135595/...
Nabin

@SteErMi hai risolto questo problema, sto affrontando la stessa situazione
Ravind Maurya,

Risposte:


118

NOTA: ho scritto questa risposta nel giugno 2013, quindi al giorno d'oggi è un po 'datata. Molte cose sono cambiate nella piattaforma Android dalla versione 6 (Marshmallow), rendendo l'intero problema più / meno obsoleto al giorno d'oggi. Tuttavia credo che questo post possa ancora valere la pena leggere come esempio di approccio all'analisi del problema generale.


L'eccezione che stai ricevendo ( SecurityException: Permission denied (missing INTERNET permission?)), indica chiaramente che non sei autorizzato a fare networking. Questo è un fatto abbastanza indiscutibile. Ma come può succedere? Di solito è a causa di una <uses-permission android:name="android.permission.INTERNET" />voce mancante nel AndroidManifest.xmlfile o, poiché l'autorizzazione Internet viene concessa durante l'installazione non in fase di esecuzione, da un bug di lunga data e mancato nel framework Android che causa l'installazione corretta dell'app, ma senza la concessione di autorizzazione prevista.

Il mio Manifest è corretto, quindi come può accadere?

Teoricamente, la presenza di uses-permissionin Manifest soddisfa perfettamente il requisito e dal punto di vista dello sviluppatore è tutto ciò che occorre fare per poter fare networking. Inoltre, poiché le autorizzazioni vengono mostrate all'utente durante l'installazione, il fatto che la tua app sia terminata installata sul dispositivo dell'utente significa che ha concesso ciò che hai richiesto (altrimenti l'installazione viene annullata), quindi supponiamo che se il tuo codice viene eseguito, tutte le autorizzazioni richieste sono concesso è valido. E una volta concesso, l'utente non può revocare l'autorizzazione in altro modo che disinstallare completamente l'app poiché il framework Android standard (da AOSP) non offre tale funzionalità al momento.

Ma le cose diventano più complicate se non ti dispiace anche che la tua app funzioni anche su dispositivi rooted . In Google Play sono disponibili strumenti che gli utenti possono installare per controllare l'autorizzazione concessa alle app installate in fase di esecuzione , ad esempio: Autorizzazioni negate e altri. Questo può essere fatto anche con CyanogenMod , marchio del fornitore (ad esempio LG) o altra ROM personalizzata , con vari tipi di "gestori della privacy" o strumenti simili.

Quindi, se l'app è bloccata in entrambi i casi, viene sostanzialmente bloccata intenzionalmente dall'utente e, in tal caso, è davvero un problema maggiore in questo caso (oppure non capisce cosa fanno realmente determinate opzioni / strumenti e quali sarebbero le conseguenze) rispetto al tuo, perché l'SDK standard (e la maggior parte delle app sono scritte pensando a tale SDK) semplicemente non si comporta in questo modo. Quindi dubito fortemente che questo problema si verifichi su dispositivi "standard", non rootati con ROM stock (o fornitori come Samsung, HTC, Sony ecc.).

Non voglio schiantarmi ...

La gestione delle autorizzazioni e / o il blocco dell'organizzazione correttamente implementati devono affrontare il fatto che la maggior parte delle app potrebbe non essere pronta per la situazione in cui l'accesso a determinate funzionalità è sia concesso che non accessibile allo stesso tempo, poiché questo è un tipo di contraddizione in cui l'app utilizza manifest per richiedere l'accesso al momento dell'installazione. Il controllo dell'accesso eseguito correttamente dovrebbe far funzionare tutte le cose come prima e limitare comunque l'usabilità utilizzando tecniche nell'ambito del comportamento previsto della funzionalità. Ad esempio, quando viene concessa una determinata autorizzazione (ad esempio GPS, accesso a Internet) tale funzione può essere resa disponibile dalla prospettiva dell'app / utente (ovvero è possibile attivare il GPS o provare a connettersi), l'implementazione modificata non può fornire dati reali - cioè il GPS può sempre non restituire coordinate, come quando sei al chiuso o non hai un "fix" satellitare. L'accesso a Internet può essere concesso come prima, ma non è possibile stabilire una connessione corretta poiché non c'è copertura o instradamento dei dati. Tali scenari dovrebbero essere previsti anche nell'uso normale, quindi dovrebbero essere già gestiti dalle app. Poiché ciò può semplicemente accadere durante il normale utilizzo quotidiano, qualsiasi arresto anomalo in tale situazione dovrebbe essere probabilmente correlato a bug dell'applicazione.

Ci mancano troppe informazioni sull'ambiente in cui si verifica questo problema per diagnosticare il problema senza indovinare, ma come tipo di soluzione, potresti prendere in considerazione l'uso di setDefaultUncaughtExceptionHandler () per rilevare tali eccezioni inaspettate in futuro e cioè mostrare semplicemente informazioni dettagliate all'utente quale autorizzazione la tua app ha bisogno invece di bloccarsi. Tieni presente che l'uso di questo molto probabilmente entrerà in conflitto con strumenti come Crittercism, ACRA e altri, quindi fai attenzione se usi uno di questi.

Appunti

Tieni presente che android.permission.INTERNETnon è l'unica autorizzazione relativa alla rete che potresti dover dichiarare in manifest nel tentativo di eseguire correttamente il networking. La INTERNETconcessione dell'autorizzazione consente semplicemente alle applicazioni di aprire socket di rete (che è fondamentalmente un requisito fondamentale per eseguire qualsiasi trasferimento di dati di rete). Ma nel caso in cui il tuo stack / libreria di rete desideri ottenere anche informazioni sulle reti, allora avrai bisogno anche android.permission.ACCESS_NETWORK_STATEnel tuo Manifest (che è cioè richiesto dal client HttpUrlConnection ( vedi tutorial ).


Addendum (16/07/2015)

Si noti che Android 6 (noto anche come Marshmallow) ha introdotto un meccanismo di gestione delle autorizzazioni completamente nuovo chiamato Autorizzazioni di runtime . Offre all'utente un maggiore controllo sulle autorizzazioni concesse (consente anche la concessione selettiva) o consente di revocare le autorizzazioni già concesse senza dover rimuovere l'app:

Questo [...] introduce un nuovo modello di autorizzazioni, in cui gli utenti possono ora gestire direttamente le autorizzazioni delle app in fase di runtime. Questo modello offre agli utenti una migliore visibilità e controllo sulle autorizzazioni, semplificando al contempo i processi di installazione e aggiornamento automatico per gli sviluppatori di app. Gli utenti possono concedere o revocare le autorizzazioni individualmente per le app installate.

Tuttavia, le modifiche non influiscono INTERNETo ACCESS_NETWORK_STATEpermessi, che sono considerati i permessi "normale". L'utente non deve concedere esplicitamente queste autorizzazioni.

Consulta la pagina di descrizione dei cambiamenti di comportamento per i dettagli e assicurati che la tua app si comporti correttamente anche sui sistemi più recenti. È particolarmente importante quando il tuo progetto è impostato targetSdkalmeno 23come allora devi supportare un nuovo modello di autorizzazioni ( documentazione dettagliata ). Se non sei pronto, assicurati di mantenerlo targetSdkal massimo in 22quanto ciò garantisce che anche il nuovo Android utilizzerà il vecchio sistema di autorizzazione quando la tua app è installata.


Questo significa chiaramente che non gli è permesso fare networking. O non è richiesto in Manifest o non è concesso dalla piattaforma (cosa che può essere eseguita su dispositivi rooted).
Marcin Orlowski

2
Votato questa risposta per annullare il voto negativo di qualcun altro. All'inizio pensavo che davvero non avessi letto l'intera domanda e volessi solo essere veloce (a proposito, la tua risposta era davvero troppo breve all'inizio ;-)), ma penso che l'osservazione sugli utenti (su dispositivi rooted) essere in grado di contrastare le tue richieste di autorizzazione è stato positivo.
crogiolarsi il

Mmmm quindi se questo proviene da un utente rootato che sta rimuovendo i permessi ho 2 domande: 1) come posso sapere se non ho quel permesso? 2) Come posso chiederlo di nuovo? (ancora, non so se stiamo parlando di questo tipo di problema)
StErMi

Non è possibile richiederlo di nuovo, perché questa autorizzazione non viene concessa in fase di esecuzione. Vedere la risposta modificata per una possibile "soluzione"
Marcin Orlowski

1
Lo stesso qui: stavo per eseguire il downgrade ma la seconda parte della risposta sembra essere la parte che vale la pena leggere :) dovresti rimuovere le prime righe delle risposte poiché StErMi ha mostrato chiaramente di aver impostato il permesso INTERNET.
Thierry

43

Assicurati che il luogo in cui stai aggiungendo

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

è giusto.

Dovresti scriverlo in questo modo in AndroidManifest.xml:

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

Non commettere i miei errori :)


33

Android Studio 1.3b1 (non sono sicuro delle altre versioni) ha completato automaticamente la mia autorizzazione a Internet per ANDROID.PERMISSION.INTERNET. Modificandolo per android.permission.INTERNETrisolvere il problema.


Questo dovrebbe ora essere risolto in Android Studio 1.4 RC 1 (attualmente nel canale Canary).
Tom

30

Aggiungi al file manifest la riga:

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

L'ha risolto per me.


20

Ho risolto questo errore, stavo aggiungendo le autorizzazioni all'interno del tag dell'applicazione per errore. Ho messo fuori e funziona bene. Spero che aiuti qualcuno.


16

Ho avuto anche questo problema. era strano che funzionasse sul mio emulatore di lecca-lecca, ma non sul mio dispositivo kitkat.

Android Studio ora ti costringerà a scrivere il permesso in maiuscolo, e questo è il problema.

Inserisci

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

Sopra la scheda dell'applicazione e funzionerà.


Questa è la risposta semplice e corretta. E dovrebbe essere quello in cima!
Kostanos

13

Scrivi la tua autorizzazione prima del tag dell'applicazione come indicato di seguito.

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

Questa è stata in realtà l'unica cosa che mi ha aiutato :( Per niente intuitivo.
Ivan Perez,

4

Metti questi permessi fuori dal <application>tag preferibile prima del tag, l'ho provato e per me funziona.

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


2

Proprio come ha detto Tom. Quando inizi con la maiuscola, il Acompletamento automatico lo completerà come.

ANDROID.PERMISSION.INTERNET

Quando inizi a digitare con, il acompletamento automatico lo completerà come

android.permission.INTERNET

Il secondo è quello corretto.


2

Passo ore a cercare una soluzione a questo problema e nessuna delle soluzioni nelle risposte ha funzionato. Poi ho scoperto di aver aggiunto accidentalmente uno spazio durante il completamento automatico tra android.permission.INTERNETe"


0

Beh, è ​​un tipo di bug molto confuso. Potrebbero esserci molte ragioni:

  1. Non stai menzionando le autorizzazioni nel posto giusto. Come sopra l'applicazione.
  2. Non stai usando lettere minuscole.
  3. In alcuni casi è necessario aggiungere anche l'autorizzazione dello stato di rete.
  4. Uno che era il mio caso ci sono alcune righe vuote nelle righe manifest. Come potrebbe esserci una riga vuota tra il tag di autorizzazione e la riga dell'applicazione. Rimuovili e il gioco è fatto. Spero che possa aiutare

-7

rimuovilo nel tuo file manifest

 xmlns:tools="http://schemas.android.com/tools"

Non esiste un codice di questo tipo nel file manifest (AndroidManifest.xml) nella domanda.
Pang
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.