Welche Berechtigung benötige ich, um von einer Android-Anwendung aus auf das Internet zuzugreifen?

596

Ich erhalte die folgende Ausnahme beim Ausführen meiner App:

java.net.SocketException: Permission denied (maybe missing INTERNET permission)

Wie löse ich das Problem mit der fehlenden Berechtigung?

Janusz
quelle

Antworten:

1245

Fügen Sie Ihrer Manifestdatei die INTERNET- Berechtigung hinzu.

Sie müssen diese Zeile hinzufügen:

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

außerhalb des Anwendungs-Tags in Ihrer AndroidManifest.xml

mhsmith
quelle
43
Dieses Tag sollte VOR dem Anwendungs-TAG platziert werden. Wenn Sie if nach der Anwendung TAG setzen, wird eine Warnung ausgegeben.
Marek
2
Starten Sie den Emulator neu (war für mich erforderlich, bevor dies wirksam werden würde).
jcalfee314
Ich habe ein Problem. Ich möchte keinen Zugang zum Internet für meine apk. Keine Berechtigung zum Manifest hinzugefügt, aber wenn ich versuche, apk zu installieren, informiere mich die Installation, dass apk VOLLSTÄNDIGEN INTERNETZUGRIFF benötigt. Wie kann man dieses Problem lösen? Zum Manifest wurden keine Berechtigungen hinzugefügt. Meine apk benötigt keinen vollständigen Internetzugang - ich möchte diese Berechtigung deaktivieren.
Altivo
1
@Altivo Sehen Sie sich Ihr zusammengeführtes Manifest in ../app/build/intermediates/manifests/full/debug/AndroidManifest.xml an. Hier finden Sie alle Berechtigungen, die Ihre App verwendet. Dies wird durch Zusammenführen des Manifests Ihrer App sowie der Manifeste der verwendeten Bibliotheken gebildet. Sie müssen hauptsächlich die Google Play Services-Bibliothek verwendet haben, die die Berechtigungen INTERNET und ACCESS_NETWORK_STATE enthält.
Sid
116

In der neuesten Version von Google Play hat Google die Notwendigkeit beseitigt, um Erlaubnis für das Internet zu bitten, da "die meisten Apps dies heutzutage sowieso benötigen". Für Benutzer mit älteren Versionen wird jedoch weiterhin empfohlen, den folgenden Code in Ihrem Manifest zu belassen

<uses-permission android:name="android.permission.INTERNET" /> 
Finley Smith
quelle
1
Gibt es einen Verweis auf ein Google-Dokument, in dem dies steht?
Farindk
@farindk den ersten Notizabschnitt hier: support.google.com/googleplay/answer/6014972?hl=de
Finley Smith
24
In dem Dokument, auf das Sie verweisen, wird erläutert, wie der Play Store die Internetberechtigung nicht in die primäre Liste der Berechtigungen aufnimmt, die dem Benutzer angezeigt werden, wenn er gefragt wird, ob eine App installiert werden soll. Es heißt nicht , dass eine App, die das Internet verwendet, dies nicht mehr in der Liste der verwendeten Berechtigungen ihres Manifests deklarieren muss. Wollen Sie damit sagen, dass alle Apps implizit das Internet nutzen, ohne dies in ihren Manifesten zu sagen ? Das heißt, wenn Janusz dieselbe App von der Frage in den heutigen Telefonen aus ausgeführt hätte, wäre sie nicht so gescheitert wie bei der Frage?
Rob Kennedy
2
Wenn Sie auf die Berechtigungsdokumente verweisen, werden Sie feststellen, dass sie nicht veraltet sind. Veraltete Berechtigungen sind Berechtigungen, die nicht verwendet werden und die Sie nicht in Ihrem Manifest haben müssen, weil sie nicht mehr verwendet werden. Nicht verwendete Berechtigungen können daran liegen, dass die API ersetzt wurde oder nicht mehr benötigt wird. Also ja, Sie benötigen die Internet-Erlaubnis, um auf das Internet zugreifen zu können. Selbst in den grundlegenden Dokumenten zum Herstellen einer Verbindung zum Internet wird angegeben, dass die Internetberechtigung erforderlich ist.
Zoe
76

Setzen Sie einfach die obere Zeile wie unten

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.avocats.activeavocats"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="16" />

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

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >


    <activity
        android:name="com.example.exp.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

Kirtikumar A.
quelle
42
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
AndroidDev
quelle
Kennen Sie andere Berechtigungen, die möglicherweise erforderlich sind, um die NTLM / Windows-Authentifizierung zuzulassen? Besonders in einer XenMobile-Umgebung ... wirf hier nur einen Pfeil ...
Whyoz
12

Wenn Sie das Internet in Ihrer App verwenden und den Netzwerkstatus überprüfen möchten, dh wenn die App mit dem Internet verbunden ist, müssen Sie den folgenden Code außerhalb des applicationTags verwenden.

Für die Internet-Erlaubnis:

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

Für den Zugriff auf den Netzwerkstatus:

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

Vollständiger Code:

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="16" />

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

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >


    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
Amy
quelle
7

Wenn Sie nur das Internet nutzen, verwenden Sie

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

Wenn Sie den Status des Internets erhalten, verwenden Sie auch -

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

direkt über dem Anwendungs-Tag.

Akshay Paliwal
quelle
6

Vergessen Sie das Hinzufügen der Berechtigung zum Manifest. Fügen Sie diesen Code als Methode hinzu

public static boolean hasPermissions(Context context, String... permissions)
{
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null)
    {
        for (String permission : permissions)
        {
            if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED)
            {
                return false;
            }
        }
    }
    return true;
}

und schreibe dies in dein Main

int PERMISSION_ALL = 1;
    String[] PERMISSIONS = {Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_SMS, Manifest.permission.CAMERA};

    if (!hasPermissions(this, PERMISSIONS)) {
        ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);
    }
Vaibhav Joshi
quelle
4

Benutze diese:

<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
Olorunfemi Ajibulu
quelle
3

Fügen Sie einfach den folgenden Code in AndroidManifest ein:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Hiren Gondaliya
quelle
3

Gemäß den aktuellen Versionen bittet Android nicht um Erlaubnis zur Interaktion mit dem Internet. Sie können jedoch den folgenden Code hinzufügen, der Benutzern mit älteren Versionen hilft. Fügen Sie diese einfach in AndroidManifest hinzu

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Kashif Faraz Shamsi
quelle
1

Google hat die Notwendigkeit beseitigt, die Erlaubnis für das Internet für die neueste Version einzuholen. Um jedoch eine Internetberechtigung in Ihrem Code anzufordern, müssen Sie diese Ihrer AndroidManifest.xml-Datei hinzufügen.

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