wake-up-neo.com

SecurityException: Berechtigung abgelehnt (fehlende INTERNET-Berechtigung?)

dieser Fehler ist wirklich sehr, sehr seltsam und ich weiß nicht, wie ich ihn reproduzieren und beheben kann, da ich viele Suchen durchgeführt habe, aber nichts war nützlich.

Hier ist der 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)

Hier ist meine 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>

Bitte frage mich nicht, ob ich die korrekte INTERNET-Erlaubnis in meinem Manifest habe, da diese App seit 2 Jahren auf dem Markt ist: P

Ich habe auch bemerkt, dass (von Crittercism) alle Fehler von Android 4.1.x (JB) stammen. Ich weiß nicht, ob das Gerät verwurzelt ist oder was (ich kann diese Informationen momentan nicht sehen)

83
StErMi

ANMERKUNG: Ich habe diese Antwort im Juni 2013 geschrieben, daher ist sie jetzt etwas veraltet. Einige Dinge haben sich in Android seit Version 6 (Marshmallow) der Plattform geändert, wodurch das gesamte Problem heutzutage mehr oder weniger veraltet ist. Ich bin jedoch der Meinung, dass dieser Beitrag als allgemeines Beispiel für die Problemanalyse noch lesenswert ist, und hoffe, dass Sie ihn dennoch als lehrreich empfinden.


Eine Ausnahme, die Sie erhalten (SecurityException: Permission denied (missing INTERNET permission?)), weist eindeutig darauf hin, dass Sie kein Netzwerk betreiben dürfen. Das ist eine ziemlich unbestreitbare Tatsache. Aber wie kann das passieren? Normalerweise liegt es entweder daran, dass der Eintrag <uses-permission Android:name="Android.permission.INTERNET" /> in Ihrer AndroidManifest.xml -Datei fehlt, oder, da die Internet-Erlaubnis bei der Installation nicht zur Laufzeit erteilt wird, dass ein langjähriger Fehler im Android -Framework übersehen wurde Bewirkt, dass Ihre App erfolgreich installiert wird, jedoch ohne die erwartete Erlaubnis.

Mein Manifest ist korrekt. Wie kann das passieren?

Theoretisch erfüllt das Vorhandensein von uses-permission in Manifest die Anforderung perfekt und ist vom Standpunkt des Entwicklers aus alles, was getan werden muss, um in der Lage zu sein, Netzwerke aufzubauen. Da dem Benutzer während der Installation Berechtigungen angezeigt werden, bedeutet die Tatsache, dass Ihre App auf dem Gerät des Benutzers installiert wurde, dass er die von Ihnen angeforderten Berechtigungen erteilt hat (andernfalls wird die Installation abgebrochen). Wenn Ihr Code ausgeführt wird, gelten also alle angeforderten Berechtigungen gewährt ist gültig. Und sobald dies gewährt wurde, kann der Benutzer die Erlaubnis nicht widerrufen, außer die App vollständig zu deinstallieren, da das Standard-Framework Android (von AOSP) derzeit keine solche Funktion bietet.

Die Dinge werden jedoch schwieriger, wenn es Ihnen auch nichts ausmacht, dass Ihre App auch auf rooted Geräten ausgeführt wird. In Google Play sind Tools verfügbar, die Ihre Nutzer installieren können, um die Berechtigungen für installierte Apps zu steuern zur Laufzeit - zum Beispiel: Berechtigungen verweigert und andere. Dies kann auch mit CyanogenMod , Herstellermarke (d. H. LG) oder andere benutzerdefinierte ROM erfolgen, die verschiedene Arten von "Datenschutzmanagern" oder ähnlichen Tools enthalten.

Wenn also eine App in irgendeiner Weise blockiert wird, wird sie grundsätzlich absichtlich vom Benutzer blockiert, und wenn ja, ist dies in diesem Fall ein wirklich größeres Benutzerproblem (oder er/sie versteht nicht, was bestimmte Optionen/Tools wirklich tun und welche Konsequenzen dies haben würde). als Ihre, weil Standard-SDK (und die meisten Apps sind mit diesem SDK geschrieben) einfach nicht so verhält. Also ich stark bezweifle, dass dieses Problem auf "normalen", nicht gerooteten Geräten mit Standard-ROM (oder einem Hersteller wie Samsung, HTC, Sony usw.) auftritt.

Ich will nicht abstürzen ...

Eine ordnungsgemäß implementierte Berechtigungsverwaltung und/oder -sperrung muss sich mit der Tatsache befassen, dass die meisten Apps möglicherweise nicht für den Fall bereit sind, dass der Zugriff auf bestimmte Funktionen gewährt wird und gleichzeitig nicht möglich ist, da dies ein Widerspruch ist, für den die App Manifest to verwendet Fordern Sie den Zugriff zum Zeitpunkt der Installation an. Richtig durchgeführte Zugriffskontrolle muss dazu führen, dass alle Funktionen wie zuvor ausgeführt werden, und die Verwendbarkeit mithilfe von Techniken, die dem erwarteten Verhalten der Funktion entsprechen, weiterhin eingeschränkt werden. Wenn beispielsweise eine bestimmte Berechtigung erteilt wurde (z. B. GPS, Internetzugang), kann diese Funktion aus Sicht der App/Benutzer verfügbar gemacht werden (z. B. können Sie GPS einschalten oder versuchen, eine Verbindung herzustellen), kann die geänderte Implementierung keine realen Daten bereitstellen. Dh GPS kann immer keine Koordinaten zurückgeben, wie wenn Sie drinnen sind oder keinen Satelliten "fix" haben. Der Internetzugang kann wie bisher gewährt werden, Sie können jedoch keine erfolgreiche Verbindung herstellen, da keine Datenübertragung oder Weiterleitung erfolgt. Solche Szenarien sollten auch im normalen Gebrauch erwartet werden, daher sollten sie bereits von den Apps behandelt werden. Da dies im normalen Alltagsbetrieb einfach passieren kann, sollte ein Absturz in einer solchen Situation höchstwahrscheinlich mit Anwendungsfehlern zusammenhängen.

Uns fehlen zu viele Informationen über die Umgebung, in der dieses Problem auftritt, um das Problem ohne Vermutung zu diagnostizieren. Als Lösung können Sie jedoch die Verwendung von setDefaultUncaughtExceptionHandler () in Betracht ziehen, um solche unerwarteten Ausnahmen in Zukunft und beispielsweise auf einfache Weise abzufangen Zeigen Sie dem Benutzer detaillierte Informationen darüber an, welche Berechtigung Ihre App benötigt, anstatt nur abzustürzen. Bitte beachten Sie, dass dies höchstwahrscheinlich zu Konflikten mit Tools wie Crittercism, ACRA und anderen führt. Seien Sie also vorsichtig, wenn Sie eines dieser Tools verwenden.

Notizen

Bitte beachten Sie, dass Android.permission.INTERNET nicht die einzige Berechtigung für das Netzwerk ist, die Sie möglicherweise im Manifest deklarieren müssen, um das Netzwerk erfolgreich zu betreiben. Wenn die Berechtigung INTERNET erteilt wird, können Anwendungen einfach Netzwerk-Sockets öffnen (was im Grunde eine Grundvoraussetzung für jede Netzwerk-Datenübertragung ist). Wenn Ihr Netzwerkstapel/Ihre Netzwerkbibliothek aber auch Informationen über Netzwerke erhalten möchte, benötigen Sie in Ihrem Manifest auch Android.permission.ACCESS_NETWORK_STATE (was z. B. von HttpUrlConnection client ( see Tutorial ).


Nachtrag (16.07.2015)

Bitte beachten Sie, dass Android 6 (auch bekannt als Marshmallow) einen völlig neuen Berechtigungsverwaltungsmechanismus namens Runtime Permissions eingeführt hat. Sie gibt dem Benutzer mehr Kontrolle darüber, welche Berechtigungen gewährt werden (erlaubt auch selektives Gewähren) oder lässt einen bereits erteilten Berechtigungen widerrufen, ohne dass eine App entfernt werden muss:

Dies führt ein neues [...] Berechtigungsmodell ein, mit dem Benutzer App-Berechtigungen jetzt zur Laufzeit direkt verwalten können. Mit diesem Modell können Benutzer die Transparenz und Kontrolle über Berechtigungen verbessern und gleichzeitig die Installations- und Auto-Update-Prozesse für App-Entwickler optimieren. Benutzer können Berechtigungen für installierte Apps einzeln erteilen oder entziehen.

Die Änderungen wirken sich jedoch nicht auf die Berechtigungen INTERNET oder ACCESS_NETWORK_STATE aus, die als "normale" Berechtigungen gelten. Der Benutzer muss diese Berechtigung nicht explizit erteilen.

Weitere Informationen finden Sie auf der Seite Beschreibung der Verhaltensänderungen und stellen Sie sicher, dass sich Ihre App auch auf neueren Systemen korrekt verhält. Es ist besonders wichtig, wenn Ihr Projekt targetSdk auf mindestens 23 eingestellt hat, da Sie dann muss ein neues Berechtigungsmodell unterstützen ( ausführliche Dokumentation ). Wenn Sie nicht bereit sind, stellen Sie sicher, dass Sie targetSdk bis höchstens 22 beibehalten, da dies sicherstellt, dass auch neue Android das alte Berechtigungssystem verwenden, wenn Ihre App installiert wird.

114
Marcin Orlowski

Android Studio 1.3b1 (nicht sicher, ob andere Versionen verfügbar sind) hat meine Internet-Berechtigung für Android.PERMISSION.INTERNET automatisch abgeschlossen. Das Ändern in Android.permission.INTERNET hat das Problem behoben.

33
Tom

Stellen Sie sicher, dass der Ort, an dem Sie hinzufügen 

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

ist richtig.

Sie sollten es so in AndroidManifest.xml schreiben:

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

Mach meine Fehler nicht :)

32
Valeria

Fügen Sie der Manifestdatei die Zeile hinzu:

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

Es hat es für mich behoben.

29
Dashtank

Ich habe diesen Fehler behoben, ich habe versehentlich Berechtigungen innerhalb des Anwendungstags hinzugefügt. Ich habe draußen geputtet und es funktioniert gut. Ich hoffe es hilft für jemanden.

20
Sami

Ich hatte auch dieses Problem. Es war seltsam, dass es mit meinem Lollipop-Emulator funktionierte, aber nicht mit meinem KitKat-Gerät.

Android Studio zwingt Sie jetzt, die Erlaubnis in Großbuchstaben zu schreiben, und das ist das Problem.

Hinzufügen

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

Über der Anwendungsregisterkarte wird es funktionieren.

15
Boldijar Paul

Schreiben Sie Ihre Erlaubnis vor dem Anwendungstag wie unten angegeben.

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

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

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

Setzen Sie diese Berechtigung außerhalb des <application>-Tags vor dem Tag. Ich habe es versucht und es funktioniert für mich.

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

wenn es sich um eine IPv6-Adresse handelt, schauen Sie sich Folgendes an: https://code.google.com/p/Android/issues/detail?id=33046

Anscheinend gab es einen Fehler in Android, der in 4.3 (?) Behoben wurde.

3
Benjamin Foster

Genau wie Tom es erwähnt hat. Wenn Sie mit capital A beginnen, vervollständigt autocomplete es als.

Android.PERMISSION.INTERNET

Wenn Sie mit der Eingabe von a beginnen, wird die automatische Vervollständigung als abgeschlossen

Android.permission.INTERNET

Der zweite ist der richtige.

3
Shakti

Nun, es ist eine sehr verwirrende Art von Fehler. Es kann viele Gründe geben:

  1. Sie erwähnen die Berechtigungen nicht an der richtigen Stelle. Wie direkt über der Anwendung.
  2. Sie verwenden keine Kleinbuchstaben.
  3. In einigen Fällen müssen Sie auch die Berechtigung zum Netzwerkstatus hinzufügen.
  4. In meinem Fall gab es einige leere Zeilen in manifestierten Zeilen. Als könnte zwischen dem Berechtigungs-Tag und der Anwendungszeile eine Leerzeile stehen. Entferne sie und du bist fertig. Ich hoffe es wird helfen
0
Shami

Ich verbringe Stunden damit, nach einer Lösung für dieses Problem zu suchen, und keine der Lösungen in den Antworten funktionierte. Dann fand ich heraus, dass ich während der automatischen Vervollständigung versehentlich ein Leerzeichen zwischen Android.permission.INTERNET und " eingefügt habe.

0
a2en