Jakiego pozwolenia potrzebuję, aby uzyskać dostęp do Internetu z aplikacji na Androida?


596

Otrzymuję następujący wyjątek:

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

Jak rozwiązać problem braku uprawnień?

Odpowiedzi:


1245

Dodaj uprawnienie INTERNET do pliku manifestu.

Musisz dodać ten wiersz:

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

poza znacznikiem aplikacji w pliku AndroidManifest.xml


43
Ten tag należy umieścić PRZED TAGIEM aplikacji. Jeśli umieścisz, jeśli po zastosowaniu TAG, wyświetli ostrzeżenie.
Marek

2
Uruchom ponownie emulator (było to dla mnie wymagane, zanim to zadziała).
jcalfee314

Mam problem. Nie chcę dostępu do internetu dla mojej aplikacji. Brak uprawnień do manifestu, ale jeśli spróbuję zainstalować apk, instalacja poinformuje mnie, że apk potrzebuje PEŁNEGO DOSTĘPU DO INTERNETU. Jak rozwiązać ten problem? brak uprawnień dodanych do manifestu. Mój apk nie wymagał pełnego dostępu do Internetu - chcę wyłączyć to uprawnienie.
Altivo

1
@Altivo Spójrz na połączony manifest w ../app/build/intermediates/manifests/full/debug/AndroidManifest.xml. Tutaj znajdziesz wszystkie uprawnienia, z których korzysta Twoja aplikacja. Jest to tworzone przez scalenie manifestu aplikacji oraz manifestów używanych bibliotek. Musisz głównie korzystać z biblioteki usług Google Play, która zawiera uprawnienia INTERNET i ACCESS_NETWORK_STATE.
Sid

116

W najnowszej wersji Google Play Google usunął potrzebę prośby o pozwolenie na dostęp do Internetu, ponieważ „większość aplikacji i tak tego potrzebuje”. Jednak w przypadku użytkowników, którzy mają starsze wersje, nadal zaleca się pozostawienie kodu poniżej w manifeście

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

1
Jakieś odniesienie do dokumentu Google, w którym tak mówi?
farindk

@farindk pierwsza sekcja notatki tutaj: support.google.com/googleplay/answer/6014972?hl=pl
Finley Smith

24
Dokument, do którego linkujesz, mówi o tym, w jaki sposób Sklep Play nie uwzględni uprawnienia internetowego na głównej liście uprawnień wyświetlanej użytkownikowi przy pytaniu, czy zainstalować aplikację. To nie znaczy, że aplikacja, która korzysta z Internetu nie musi oświadczyć, że robi to w oczywisty Lista używanych uprawnień. Czy chcesz powiedzieć, że wszystkie aplikacje domyślnie korzystają z Internetu, nie mówiąc o tym w swoich manifestach? To znaczy, gdyby Janusz uruchomił tę samą aplikację z pytania w dzisiejszych telefonach, nie zawiódłoby tak, jak wtedy, gdy pytanie zostało zadane?
Rob Kennedy,

2
Jeśli odeślesz dokumenty uprawnień , zobaczysz, że nie są one przestarzałe. Przestarzałe uprawnienia to uprawnienia, które nie są używane, których nie trzeba mieć w swoim manifeście, ponieważ nie są one już używane. Niewykorzystane uprawnienia mogą wynikać z zastąpienia interfejsu API lub dlatego, że nie jest już potrzebny. Tak, potrzebujesz pozwolenia na dostęp do Internetu. Nawet podstawowe dokumenty dotyczące łączenia się z Internetem również stwierdzają, że wymagane jest zezwolenie na dostęp do Internetu.
Zoe


76

po prostu umieść powyżej linii jak poniżej

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


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

czy znasz jakieś inne uprawnienia, które mogą być wymagane, aby zezwolić na uwierzytelnianie NTLM / Windows? Zwłaszcza w środowisku XenMobile ... po prostu rzucając
strzałką

12

Jeśli chcesz korzystać z Internetu w swojej aplikacji, a także sprawdzać stan sieci, tj. Czy aplikacja jest podłączona do Internetu, musisz użyć kodu poniżej applicationznacznika.

Zezwolenie na dostęp do Internetu:

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

Dla stanu sieci Access:

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

Pełny kod:

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

7

jeśli tylko korzystasz z Internetu, użyj-

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

jeśli uzyskujesz stan internetu, użyj również -

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

tuż nad tagiem aplikacji.


6

zapomnij o dodaniu uprawnienia do manifestu Dodaj ten kod jako metodę

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;
}

i napisz to w swoim 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);
    }

4

Użyj tych:

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

3

Wystarczy umieścić poniższy kod w AndroidManifest:

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

3

Zgodnie z aktualnymi wersjami, Android nie pyta o pozwolenie na interakcję z Internetem, ale możesz dodać poniższy kod, który pomoże użytkownikom korzystającym ze starszych wersji Wystarczy dodać je w AndroidManifest

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


1

Google usunął potrzebę zapytania o pozwolenie na dostęp do Internetu w celu uzyskania najnowszej wersji. Mimo to, aby poprosić o pozwolenie na dostęp do Internetu w kodzie, musisz dodać je do pliku AndroidManifest.xml.

<uses-permission android:name="android.permission.INTERNET"/>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.