Wie füge ich einer Anwendung eine Manifest-Berechtigung hinzu?

428

Ich versuche, über HttpURLConnectionAndroid auf den HTTP-Link zuzugreifen , um eine Datei herunterzuladen, erhalte jedoch folgende Warnung LogCat:

WARN / System.err (223): java.net.SocketException: Berechtigung verweigert (möglicherweise fehlt die INTERNET-Berechtigung)

Ich habe android.Manifest.permissionmeiner Anwendung hinzugefügt , aber es gibt immer noch die gleiche Ausnahme.

rauben
quelle
Fügen Sie den Inhalt Ihrer Manifest-Berechtigung ein. Haben Sie Berechtigungen für INTERNET erteilt?
Anthony Forloney
Ich habe Import android.Manifest.permission hinzugefügt. zu app, sonst nichts. Was muss ich noch hinzufügen, um Berechtigungen zu erteilen
rob
2
Schauen Sie sich meine Antwort unten an und sehen Sie, ob das hilft, und ich habe keine Ahnung, was import android.Manifest.permissionfür Sie tun wird, wenn Sie keine INTERNET-Berechtigung in der Datei AndroidManifest.xml festgelegt haben
Anthony Forloney

Antworten:

933

Angenommen, Sie haben keine Berechtigungen aus Ihrer LogCatFehlerbeschreibung festgelegt. Hier ist mein Inhalt für meine AndroidManifest.xmlDatei, die Zugriff auf das Internet hat:

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

Ansonsten sollten Sie in Ordnung sein, eine Datei aus dem Internet herunterzuladen.

Anthony Forloney
quelle
3
Wenn Sie Antworten finden, die Ihre Frage lösen oder hilfreich erscheinen, ist es hilfreich, "beantwortet" und / oder positiv zu wählen. Dies hilft der Community für alle, die auf dieselben Probleme stoßen. Das ist nicht nur auf diese Frage gerichtet, sondern auch auf andere Fragen, die Sie gestellt haben
Anthony Forloney
Ich wusste nichts davon, ich werde das mit Sicherheit tun, wenn dies mein Problem lösen wird
Rob
Melden Sie sich zurück, wenn Sie auf etwas anderes stoßen, und ich werde Ihnen gerne weiterhelfen.
Anthony Forloney
1
In meinem Fall musste ich sicherstellen, dass es die SEHR ERSTE Zeile nach der Manifest-Anweisung war. Irgendwo darunter und es würde nicht funktionieren. v2.2, api level 8, htc g1
slf
1
@dialex AFAIK, es gibt kein untergeordnetes Element uses-permissioninnerhalb des applicationTags, nur das manifest.
Anthony Forloney
73

Der Berechtigungsname lautet CASE-SENSITIVE

Falls jemand mit demselben Problem zu kämpfen hat, wird zwischen Groß- und Kleinschreibung unterschieden. Ein falscher Fall bedeutet also, dass Ihre Bewerbung nicht die Erlaubnis erhält.

FALSCH

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

RICHTIG

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

Dieses Problem kann auftreten, z. bei automatischer Vervollständigung in IDE

Marek Sebera
quelle
1
Vielen Dank! Ich habe meinen ganzen Tag damit verbracht, mich zu fragen, warum meine App nicht funktioniert. Ich bin neu in Android Studio und dieses Problem trat noch nie in Eclipse auf :)
InspiredCoder
1
Und ich habe meinen ganzen Tag damit verbracht herauszufinden, was tatsächlich ein Unterschied zwischen ihnen ist, OMG seine Hauptstadt und Klein ANDROID.PERMISSION und 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>
Teraiya Mayur
quelle
34

Wenn Sie das Eclipse ADT-Plugin für Ihre Entwicklung verwenden, öffnen Sie es AndroidManifest.xmlim Android Manifest Editor (sollte die Standardaktion zum Öffnen AndroidManifest.xmlaus der Liste der Projektdateien sein).

Wählen Sie anschließend die PermissionsRegisterkarte am unteren Rand des Editors ( Manifest - Application - Permissions - Instrumentation - AndroidManifest.xml) aus, klicken Sie auf Add...a Uses Permissionund wählen Sie die gewünschte Berechtigung aus der Dropdown-Liste rechts aus, oder kopieren Sie sie einfach in die erforderliche android.permission.INTERNETBerechtigung (z. B. die erforderliche Berechtigung).

Chris
quelle
23

Kopieren Sie die folgende Zeile in Ihre Anwendungsmanifestdatei und fügen Sie sie vor dem <application> Tag ein.

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

Das Platzieren der Berechtigung unter dem <application/>Tag funktioniert, gibt Ihnen jedoch eine Warnung. Stellen Sie also sicher, dass Sie es vor der <application/>Tag-Deklaration platzieren.

nitesh
quelle
Zum Zeitpunkt des Schreibens dieses Kommentars befindet er sich außerhalb des Anwendungselements, jedoch innerhalb des Manifests. Beispiel: <Anwendung> ... </ Anwendung> <Verwendungsberechtigung android: name = "android.permission.INTERNET" /> </ manifest>
Steve Swinsburg
12

Befolgen Sie bei Verwendung von Eclipse die folgenden Schritte

1) Doppelklicken Sie auf das Manifest, um es im Editor
anzuzeigen. 2) Klicken Sie auf die Registerkarte Berechtigungen unter dem Manifest-Editor.
3) Klicken Sie auf die Schaltfläche Hinzufügen.
4) Klicken Sie im angezeigten Dialogfeld auf. (Normalerweise das letzte Element in der Liste)
5) Beachten Sie die Ansicht, die auf der rechten Seite angezeigt wird. Wählen Sie "android.permission.INTERNET".
6) Dann eine Reihe von OK und schließlich speichern.

Hoffe das hilft

Mathayo
quelle
7

Ich bin spät dran, aber ich möchte die Antwort vervollständigen.

Eine Berechtigung wird in manifest.xmllike hinzugefügt

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

Dies reicht für Standardberechtigungen aus, bei denen dem Benutzer keine Berechtigung erteilt wird. Es reicht jedoch nicht aus, die Berechtigung nur zum Manifestieren hinzuzufügen, wenn es sich um eine gefährliche Berechtigung handelt. Siehe Android Doc . Wie Kamera, Speicherberechtigungen.

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

Sie müssen den Benutzer um Erlaubnis bitten . Ich verwende die RxPermission- Bibliothek, eine weit verbreitete Bibliothek, um um Erlaubnis zu bitten. Weil es langer Code ist, den wir schreiben müssen, um um Erlaubnis zu bitten.

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

Fügen Sie diese Bibliothek Ihrer App hinzu

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

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

Dies kann auch im Zusammenhang mit dem Hinzufügen einer INTERNET-Berechtigung zu Ihrer Anwendung interessant sein:

Google hat außerdem jeder App einen Internetzugang gewährt, wodurch die Berechtigung zum Internetzugang effektiv entfernt wurde. Natürlich müssen Android-Entwickler beim Zusammenstellen der App noch angeben, dass sie einen Internetzugang wünschen. Benutzer können die Internetzugriffsberechtigung jedoch nicht mehr sehen, wenn sie eine App installieren, und aktuelle Apps ohne Internetzugang können jetzt mit einem automatischen Update ohne Aufforderung einen Internetzugang erhalten.

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

Unter dem Strich müssen Sie noch die INTERNET-Berechtigung in die Manifestdatei einfügen, aber die Anwendung wird auf den Geräten des Benutzers aktualisiert, ohne dass er um eine neue Berechtigung gebeten wird.

lenrok258
quelle
-1

Sie müssen sowohl den Netzwerk- als auch den Zugriffsnetzwerkstatus in der Manifestdatei verwenden, während Sie versuchen, über den Android-Emulator zu laden oder auf das Internet zuzugreifen.

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

Wenn Sie nur die Berechtigung .INTERNET erteilen, wird kein Zugriff auf das Internet gewährt.

zemunkh
quelle