SecurityException: Berechtigung verweigert (fehlende INTERNET-Berechtigung?)

92

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

Hier ist die Stapelverfolgung:

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 fragen Sie mich nicht, ob ich die richtige INTERNET-Berechtigung in meinem Manifest habe, da diese App seit 2 Jahren auf dem Markt ist: P.

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

StErMi
quelle
ist es möglich, dass sich der Hostname geändert hat (aufgrund dieser Fehlermeldung): Keine Adresse mit Hostname
verknüpft
Haben Sie es mit verschiedenen Geräteversionen versucht? oder auf jede Version kommen?
Pankaj Kumar
1
Bitte addieren Sie <Verwendungsberechtigung android: name = "android.permission.INTERNET" /> <Verwendungsberechtigung android: name = "android.permission.ACCESS_NETWORK_STATE" /> Außerhalb des <Anwendung> -Tags. Erstellen Sie Ihr Projekt neu und führen Sie es aus. Es hat für mich funktioniert
Azahar
Übrigens, Reihenfolge ist wichtig, stackoverflow.com/questions/25135595/…
Nabin
@SteErMi haben Sie dieses Problem gelöst, ich bin mit der gleichen Situation
konfrontiert

Antworten:

118

HINWEIS: Ich habe diese Antwort im Juni 2013 geschrieben, daher ist sie heutzutage etwas veraltet. Viele Dinge haben sich in der Android-Plattform seit Version 6 (Marshmallow) geändert, was das ganze Problem heutzutage mehr oder weniger obsolet macht. Ich glaube jedoch, dass dieser Beitrag als Beispiel für einen allgemeinen Ansatz zur Problemanalyse immer noch lesenswert sein kann.


Die Ausnahme, die Sie erhalten ( SecurityException: Permission denied (missing INTERNET permission?)), zeigt deutlich an, dass Sie kein Netzwerk betreiben dürfen. Das ist eine ziemlich unbestreitbare Tatsache. Aber wie kann das passieren? Normalerweise liegt dies entweder an einem fehlenden <uses-permission android:name="android.permission.INTERNET" />Eintrag in Ihrer AndroidManifest.xmlDatei oder, da die Internetberechtigung bei der Installation nicht zur Laufzeit erteilt wird, an einem seit langem fehlenden Fehler im Android-Framework, der dazu führt, dass Ihre App erfolgreich installiert wird, jedoch ohne die erwartete Erteilung der Berechtigung.

Mein Manifest ist korrekt. Wie kann das passieren?

Theoretisch uses-permissionerfüllt die Präsenz von in Manifest die Anforderungen perfekt und aus Entwicklersicht ist 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 die Installation Ihrer App auf dem Gerät des Benutzers beendet wurde, dass er das gewährt hat, was Sie angefordert haben (andernfalls wird die Installation abgebrochen). Nehmen Sie also an, dass bei Ausführung Ihres Codes alle angeforderten Berechtigungen vorhanden sind gewährt ist gültig. Nach der Erteilung kann der Benutzer die Berechtigung nur auf die vollständige Deinstallation der App widerrufen, da das Standard-Android-Framework (von AOSP) derzeit keine solche Funktion bietet.

Es wird jedoch schwieriger, wenn es Ihnen auch nichts ausmacht, dass Ihre App auch auf gerooteten Geräten ausgeführt wird. In Google Play stehen Tools zur Verfügung, die Ihre Nutzer installieren können, um die Berechtigung zu steuern, die installierten Apps zur Laufzeit erteilt wird. Beispiel: Verweigerte Berechtigungen und andere. Dies kann auch mit CyanogenMod , einer Herstellermarke (z. B. LGs) oder einem anderen benutzerdefinierten ROM erfolgen , das verschiedene Arten von "Datenschutzmanagern" oder ähnlichen Tools enthält.

Wenn die App so oder so blockiert wird, wird sie im Grunde genommen 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 was die Konsequenzen wären). als deins, weil sich das Standard-SDK (und die meisten Apps sind für dieses SDK geschrieben) einfach nicht so verhält. Daher bezweifle ich stark, dass dieses Problem bei "Standard" -Geräten ohne Rootberechtigung mit Standard-ROM (oder einem Hersteller wie Samsung, HTC, Sony usw.) auftritt.

Ich will nicht abstürzen ...

Eine ordnungsgemäß implementierte Berechtigungsverwaltung und / oder Organisationsblockierung muss sich mit der Tatsache befassen, dass die meisten Apps möglicherweise nicht für die Situation bereit sind, in der der Zugriff auf bestimmte Funktionen gleichzeitig gewährt wird und nicht gleichzeitig verfügbar ist, da dies ein Widerspruch ist, für den die App das Manifest verwendet Zugriff zur Installationszeit anfordern. Richtig durchgeführte Zugriffssteuerung sollte dafür sorgen, dass alle Dinge wie zuvor funktionieren, und dennoch die Benutzerfreundlichkeit mithilfe von Techniken einschränken, die dem erwarteten Verhalten der Funktion entsprechen. Wenn beispielsweise eine bestimmte Berechtigung erteilt wird (z. B. GPS, Internetzugang), kann eine solche Funktion aus Sicht der App / des Benutzers verfügbar gemacht werden (dh Sie können GPS einschalten oder versuchen, eine Verbindung herzustellen), und die geänderte Implementierung kann keine echten Daten liefern. Das heißt, GPS kann immer keine Koordinaten zurückgeben, z. B. wenn Sie sich in Innenräumen befinden oder keinen Satelliten "fix" haben. Internetzugang kann wie bisher gewährt werden, Sie können jedoch keine erfolgreiche Verbindung herstellen, da keine Datenabdeckung oder kein Routing vorhanden sind. Solche Szenarien sollten auch bei normaler Verwendung erwartet werden, daher sollten sie bereits von den Apps verarbeitet werden. Da dies während des normalen täglichen Gebrauchs einfach passieren kann, sollte ein Absturz in einer solchen Situation höchstwahrscheinlich mit Anwendungsfehlern zusammenhängen.

Es 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 in Betracht ziehen, setDefaultUncaughtExceptionHandler () zu verwenden, um solche unerwarteten Ausnahmen in Zukunft abzufangen, und dem Benutzer einfach detaillierte Informationen zu zeigen, welche Berechtigung vorliegt Ihre App muss nicht nur abstürzen. Bitte beachten Sie, dass die Verwendung dieser Funktion höchstwahrscheinlich mit Tools wie Crittercism, ACRA und anderen in Konflikt steht. Seien Sie also vorsichtig, wenn Sie eines dieser Tools verwenden.

Anmerkungen

Bitte beachten Sie, dass dies android.permission.INTERNETnicht die einzige netzwerkbezogene Berechtigung ist, die Sie möglicherweise im Manifest deklarieren müssen, um eine erfolgreiche Vernetzung durchzuführen. Wenn eine INTERNETBerechtigung erteilt wird, können Anwendungen lediglich Netzwerk-Sockets öffnen (was im Grunde eine Grundvoraussetzung für jede Netzwerkdatenübertragung ist). Wenn Ihr Netzwerkstapel / Ihre Netzwerkbibliothek jedoch auch Informationen zu Netzwerken erhalten möchte, benötigen Sie diese auch android.permission.ACCESS_NETWORK_STATEin Ihrem Manifest (das vom HttpUrlConnection- Client benötigt wird ( siehe Lernprogramm ).


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 . Es gibt dem Benutzer mehr Kontrolle darüber, welche Berechtigungen erteilt werden (ermöglicht auch die selektive Erteilung) oder lässt bereits erteilte Berechtigungen widerrufen, ohne dass die App entfernt werden muss:

Damit wird [...] ein neues Berechtigungsmodell eingeführt, mit dem Benutzer App-Berechtigungen jetzt zur Laufzeit direkt verwalten können. Dieses Modell bietet Benutzern eine verbesserte Sichtbarkeit und Kontrolle über Berechtigungen und optimiert gleichzeitig die Installations- und Auto-Update-Prozesse für App-Entwickler. Benutzer können Berechtigungen für installierte Apps einzeln erteilen oder widerrufen.

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

Weitere Informationen finden Sie auf der Beschreibungsseite zu Verhaltensänderungen. Stellen Sie sicher, dass sich Ihre App auch auf neueren Systemen korrekt verhält. Dies ist besonders wichtig, wenn Ihr Projekt targetSdkmindestens 23so eingestellt ist, dass Sie ein neues Berechtigungsmodell unterstützen müssen ( detaillierte Dokumentation ). Wenn Sie nicht bereit sind, stellen Sie sicher, dass Sie sich targetSdkhöchstens daran halten , 22da dies sicherstellt, dass auch neues Android das alte Berechtigungssystem verwendet, wenn Ihre App installiert wird.

Marcin Orlowski
quelle
Dies bedeutet eindeutig, dass er kein Networking betreiben darf. Es wird entweder entweder nicht im Manifest angefordert oder nicht von der Plattform gewährt (was auf gerooteten Geräten möglich ist).
Marcin Orlowski
2
Hat diese Antwort positiv bewertet, um die Ablehnung von jemand anderem rückgängig zu machen. Zuerst dachte ich, dass Sie tatsächlich nicht die gesamte Frage gelesen haben und einfach nur schnell sein wollten (Ihre Antwort war übrigens anfangs wirklich zu kurz ;-)), aber ich denke, die Bemerkung über Benutzer (auf gerooteten Geräten) Es war gut, Ihre Erlaubnisanfragen vereiteln zu können.
Baske
Mmmm, wenn dies von einem gerooteten Benutzer stammt, der Berechtigungen entfernt, habe ich zwei Fragen: 1) Wie kann ich wissen, ob ich diese Berechtigung nicht habe? 2) Wie kann ich es noch einmal fragen? (
Trotzdem
Sie können nicht erneut danach fragen, da diese Berechtigung zur Laufzeit nicht erteilt wird. Siehe bearbeitete Antwort für mögliche "Lösung"
Marcin Orlowski
1
Gleiches hier: Ich wollte gerade ein Downgrade durchführen, aber der zweite Teil der Antwort scheint der lesenswerte Teil zu sein :) Sie sollten die ersten Zeilen der Antworten entfernen, da StErMi deutlich zeigte, dass er die INTERNET-Berechtigung festgelegt hatte.
Thierry
43

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

Valeria
quelle
33

Android Studio 1.3b1 (bei anderen Versionen nicht sicher) hat meine Internetberechtigung für automatisch vervollständigt ANDROID.PERMISSION.INTERNET. Ändern Sie es, um android.permission.INTERNETdas Problem zu beheben.

Tom
quelle
Dies sollte jetzt in Android Studio 1.4 RC 1 (derzeit im kanarischen Kanal) behoben sein.
Tom
30

Fügen Sie der Manifestdatei die folgende Zeile hinzu:

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

Es hat es für mich behoben.

Dashtank
quelle
20

Ich habe diesen Fehler behoben und versehentlich Berechtigungen innerhalb des Application-Tags hinzugefügt. Ich habe draußen geputtet und es funktioniert gut. Hoffe es hilft jemandem.

Sami
quelle
16

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

Android Studio zwingt Sie jetzt dazu, die Berechtigung 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 Registerkarte "Anwendung" und es wird funktionieren.

Boldijar Paul
quelle
Dies ist die einfache und richtige Antwort. Und sollte derjenige an der Spitze sein!
Kostanos
13

Schreiben Sie Ihre Erlaubnis vor dem unten angegebenen Anwendungstag.

<?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
quelle
Dies war eigentlich das einzige, was mir geholfen hat :( Überhaupt nicht intuitiv.
Ivan Perez
4

Platzieren Sie diese Berechtigung außerhalb des <application>Tags, vorzugsweise 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"/>
Tobore Igbe
quelle
2

Genau wie Tom es erwähnt hat. Wenn Sie mit Kapital beginnen, Awird es durch die automatische Vervollständigung als abgeschlossen.

ANDROID.PERMISSION.INTERNET

Wenn Sie mit der Eingabe beginnen, awird die automatische Vervollständigung als abgeschlossen

android.permission.INTERNET

Der zweite ist der richtige.

Shakti
quelle
2

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

a2en
quelle
0

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 Netzwerkstatusberechtigung hinzufügen.
  4. In meinem Fall gibt es einige Leerzeilen in Manifestzeilen. Als ob es eine leere Zeile zwischen dem Berechtigungs-Tag und der Anwendungszeile geben könnte. Entfernen Sie sie und Sie sind fertig. Hoffe es wird helfen
Shami
quelle
-7

Entfernen Sie dies in Ihrer Manifestdatei

 xmlns:tools="http://schemas.android.com/tools"
jiangyongyuan
quelle
In der Manifestdatei (AndroidManifest.xml) der Frage befindet sich kein solcher Code.
Pang