Di quali autorizzazioni ho bisogno per accedere a Internet da un'applicazione Android?


596

Ottengo la seguente eccezione eseguendo la mia app:

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

Come posso risolvere il problema di autorizzazione mancante?

Risposte:


1245

Aggiungi l' autorizzazione INTERNET al tuo file manifest.

Devi aggiungere questa riga:

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

all'esterno del tag dell'applicazione in AndroidManifest.xml


43
Questo tag deve essere posizionato PRIMA del TAG di applicazione. Se si inserisce se dopo l'applicazione TAG, viene emesso un avviso.
Marek,

2
Riavvia l'Emulatore (era necessario per me prima che questo avesse effetto).
jcalfee314,

Ho un problema. Non voglio accedere a Internet per il mio apk. Nessuna autorizzazione aggiunta per manifest, ma se provo a installare apk, l'installazione mi informa che l'apk necessita di ACCESSO INTERNET COMPLETO. Come risolvere questo problema? nessuna autorizzazione aggiunta a manifest. Il mio apk non ha richiesto l'accesso completo a Internet - voglio disabilitare questa autorizzazione.
Altivo,

1
@Altivo Guarda il tuo manifest unito in ../app/build/intermediates/manifests/full/debug/AndroidManifest.xml. Qui troverai tutte le autorizzazioni utilizzate dalla tua app. Questo si forma unendo il manifest della tua app con i manifest delle librerie usate. Devi aver utilizzato principalmente la libreria dei servizi di Google Play, che contiene le autorizzazioni INTERNET e ACCESS_NETWORK_STATE.
Sid

116

Nell'ultima versione di Google Play, Google ha rimosso la necessità di chiedere l'autorizzazione per Internet poiché "la maggior parte delle app ne ha bisogno al giorno d'oggi". Tuttavia, per gli utenti che hanno versioni precedenti, si consiglia comunque di lasciare il codice sottostante nel manifest

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

1
Qualche riferimento a un documento di Google dove lo dice?
Farindk,

@farindk la prima sezione della nota qui: support.google.com/googleplay/answer/6014972?hl=it
Finley Smith,

24
Il documento a cui ti colleghi parla di come il Play Store non includerà l'autorizzazione Internet nell'elenco principale delle autorizzazioni che mostra all'utente quando chiede se installare un'app. E non dire che un app che utilizza Internet non ha bisogno di più tempo per dichiarare che lo fa nella sua lista di manifesto di permessi usati. Intendi dire che tutte le app usano implicitamente Internet senza dirlo nei loro manifesti? Cioè, se Janusz ha la stessa applicazione dalla questione in odierni telefoni, sarebbe non hanno fallito il modo in cui ha fatto quando la domanda è stato chiesto?
Rob Kennedy,

2
Se fai riferimento ai documenti di autorizzazione , vedrai che non è obsoleto. Le autorizzazioni obsolete sono autorizzazioni non utilizzate, che non è necessario disporre nel file manifest perché non vengono più utilizzate. Le autorizzazioni non utilizzate possono essere perché l'API è stata sostituita o perché non è più necessaria. Quindi sì, hai bisogno del permesso per accedere a Internet. Anche i documenti di base sulla connessione a Internet affermano anche che è richiesta l'autorizzazione a Internet.
Zoe,


76

metti sopra la linea come sotto

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

conosci altre autorizzazioni che potrebbero essere necessarie per consentire l'autenticazione NTLM / Windows? Soprattutto in un ambiente XenMobile ... basta lanciare un dardo qui ..
whyoz

12

Se desideri utilizzare Internet nella tua app e controllare lo stato della rete, ad esempio se l'app è connessa a Internet, devi utilizzare il codice sottostante al di fuori del applicationtag.

Per l'autorizzazione Internet:

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

Per lo stato della rete di Access:

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

Codice completo:

<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

se solo usando internet, allora usa-

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

se stai ottenendo lo stato di internet, usa anche -

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

appena sopra il tag dell'applicazione.


6

dimentica di aggiungere l'autorizzazione al manifest Aggiungi questo codice come metodo

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

e scrivilo nel tuo 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

Usa questi:

<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

Inserisci il codice qui sotto in AndroidManifest:

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

3

Come per le versioni attuali, Android non richiede l'autorizzazione per interagire con Internet ma è possibile aggiungere il codice seguente che aiuterà gli utenti che utilizzano versioni precedenti Basta aggiungerli in AndroidManifest

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


1

Google ha rimosso la necessità di chiedere l'autorizzazione per Internet per l'ultima versione. Tuttavia, per richiedere l'autorizzazione Internet nel codice è necessario aggiungerli al file AndroidManifest.xml.

<uses-permission android:name="android.permission.INTERNET"/>
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.