Come aggiungere l'autorizzazione manifest a un'applicazione?


428

Sto tentando di accedere al collegamento HTTP utilizzando HttpURLConnectionin Android per scaricare un file, ma ricevo questo avviso in LogCat:

WARN / System.err (223): java.net.SocketException: autorizzazione negata (forse mancante autorizzazione INTERNET)

Ho aggiunto android.Manifest.permissionalla mia domanda ma continua a offrire la stessa eccezione.


Incollare i contenuti dell'autorizzazione manifest, hai concesso le autorizzazioni per INTERNET?
Anthony Forloney,

ho aggiunto import android.Manifest.permission; all'app, nient'altro. Cos'altro devo aggiungere per concedere le autorizzazioni
rubare il

2
Guarda la mia risposta qui sotto e vedi se questo aiuta, e non ho idea di cosa import android.Manifest.permissionfarà per te se non hai impostato l'autorizzazione INTERNET nel file AndroidManifest.xml
Anthony Forloney

Risposte:


935

Supponendo che non hai impostato le autorizzazioni dalla LogCatdescrizione dell'errore, ecco i miei contenuti per il mio AndroidManifest.xmlfile che ha accesso a Internet:

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

A parte questo, dovresti andare bene per scaricare un file da Internet.


3
Se trovi risposte che risolvono la tua domanda o sembrano utili, è utile selezionarle come "risposte" e / o voti positivi, aiuta la comunità di chiunque incontri gli stessi problemi. Questo non è solo diretto a questa domanda, ma anche altre domande che hai posto
Anthony Forloney il

non lo sapevo, lo farò di sicuro se questo risolverà il mio problema
derubare il

segnala se incontri qualcosa di diverso e sarò più che felice di aiutarti.
Anthony Forloney,

1
Nel mio caso ho dovuto assicurarmi che fosse la riga MOLTO PRIMA dopo la dichiarazione manifest .. ovunque sotto quella e che non avrebbe funzionato. v2.2, api livello 8, htc g1
slf

1
@dialex AFAIK, non c'è nessun elemento figlio uses-permissionall'interno del applicationtag, solo il manifest.
Anthony Forloney,

73

Il nome dell'autorizzazione è CASE-SENSITIVE

Nel caso in cui qualcuno abbia problemi con lo stesso problema, si tratta di un'affermazione con distinzione tra maiuscole e minuscole , quindi caso errato significa che l'applicazione non otterrà l'autorizzazione.

SBAGLIATO

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

CORRETTA

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

Questo problema può verificarsi ad es. al completamento automatico in IDE


1
Grazie! Ho perso tutto il giorno chiedendomi perché la mia app non funzionasse. Sono nuovo di Android Studio e questo problema non si è verificato in Eclipse prima :)
InspiredCoder

1
E ho sprecato la mia intera giornata a capire quale sia effettivamente la differenza tra loro, OMG, Capital e Small ANDROID.PERMISSION e android.permission;): p
fWd82


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

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="18" />

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="com.example.towntour.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Black.NoTitleBar" >
    <activity
        android:name="com.photoeffect.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>

</manifest>

34

Se stai utilizzando il plug-in Eclipse ADT per il tuo sviluppo, apri AndroidManifest.xmll'Editor manifest di Android (dovrebbe essere l'azione predefinita per l'aperturaAndroidManifest.xml dall'elenco dei file di progetto).

Successivamente, seleziona la Permissionsscheda nella parte inferiore dell'editor ( Manifest - Application - Permissions - Instrumentation - AndroidManifest.xml), quindi fai clic su Add...a Uses Permissione seleziona l'autorizzazione desiderata dal menu a discesa a destra, oppure copia e incolla quella necessaria (come l' android.permission.INTERNETautorizzazione richiesta).


23

Copia la seguente riga nel file manifest dell'applicazione e incollala prima del <application> tag.

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

Posizionare l'autorizzazione sotto il <application/>tag funzionerà, ma ti avviserà. Quindi assicurati di posizionarlo prima della <application/>dichiarazione del tag.


Al momento della stesura di questo commento, va oltre l'elemento dell'applicazione ma all'interno del manifest. ad es. <application> ... </application> <usi-permesso android: name = "android.permission.INTERNET" /> </manifest>
Steve Swinsburg

12

Quando si utilizza eclipse, attenersi alla seguente procedura

1) Fare doppio clic sul manifest per mostrarlo sull'editor
2) Fare clic sulla scheda delle autorizzazioni sotto l'editor manifest.
3) Fare clic sul pulsante Aggiungi
4) nella finestra di dialogo che appare. Fare clic su usa l'autorizzazione. (Solitamente l'ultimo elemento dell'elenco)
5) Notare la vista che appare sul lato destro Selezionare "android.permission.INTERNET"
6) Quindi una serie di Ok e infine salvare.

Spero che sia di aiuto


7

Sono in ritardo ma voglio completare la risposta.

Un'autorizzazione viene aggiunta in manifest.xmllike

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

Questo è sufficiente per le autorizzazioni standard in cui non viene richiesta alcuna autorizzazione all'utente. Tuttavia, non è sufficiente aggiungere l'autorizzazione solo per manifestare se si tratta di un'autorizzazione pericolosa. Vedi il documento Android . Come fotocamera, autorizzazioni di archiviazione.

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

Dovrai chiedere il permesso all'utente . Uso la libreria RxPermission che è una libreria ampiamente usata per chiedere l'autorizzazione. Perché è un codice lungo che dobbiamo scrivere per chiedere il permesso.

RxPermissions rxPermissions = new RxPermissions(this); // where this is an Activity instance // Must be done during an initialization phase like onCreate
rxPermissions
    .request(Manifest.permission.CAMERA)
    .subscribe(granted -> {
        if (granted) { // Always true pre-M
           // I can control the camera now
        } else {
           // Oups permission denied
        }
    });

Aggiungi questa libreria alla tua app

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

dependencies {
    implementation 'com.github.tbruyelle:rxpermissions:0.10.1'
    implementation 'com.jakewharton.rxbinding2:rxbinding:2.1.1'
}

4

Ciò può anche essere interessante nel contesto dell'aggiunta dell'autorizzazione INTERNET all'applicazione:

Google ha inoltre fornito a ciascuna app l'accesso a Internet, rimuovendo efficacemente l'autorizzazione di accesso a Internet. Oh, certo, gli sviluppatori Android devono ancora dichiarare di voler accedere a Internet quando mettono insieme l'app. Ma gli utenti non possono più vedere l'autorizzazione di accesso a Internet durante l'installazione di un'app e le app correnti che non dispongono di accesso a Internet possono ora ottenere l'accesso a Internet con un aggiornamento automatico senza richiedere conferma.

Fonte: http://www.howtogeek.com/190863/androids-app-permissions-were-just-simplified-now-theyre-much-less-secure/

La linea di fondo è che devi ancora aggiungere l'autorizzazione INTERNET nel file manifest ma l'applicazione verrà aggiornata sui dispositivi dell'utente senza chiedere loro una nuova autorizzazione.


-1

Devi utilizzare sia Network che Access Network State nel file manifest mentre stai provando a caricare o accedere a Internet tramite l'emulatore Android.

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

Se stai concedendo solo l'autorizzazione .INTERNET, non accederà a 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.