2016-06-22 19 views
0

Ich möchte eine Funktionalität in meiner App, für die ich die Erlaubnis benötigen INTERNET.Android: Anfrage zur Laufzeit

Aber nicht alle Benutzer möchten diese Funktionalität verwenden und da dies eine sehr starke Erlaubnis ist, möchte ich nicht jeden zwingen, es an die App zu geben, wenn sie es nur verwenden möchten, wenn sie verwenden möchten diese Funktionalität.

Also muss ich zur Laufzeit um diese Erlaubnis bitten. das Minimum sdk für die App ist 15 und ich möchte es nicht höher setzen.

Die Methode requestPermissions(String[],int), die ich in meinem Activity aufrufen kann, ist nur mit API 23 verfügbar, aber ich kann ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.INTERNET},0); aufrufen, aber es wird kein Dialog angezeigt.

Und ja, ich überprüft haben, ob die Genehmigung bereits erteilt:

if(ContextCompat.checkSelfPermission(this,Manifest.permission.INTERNET)!= 
PackageManager.PERMISSION_GRANTED) 
    ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.INTERNET},0); 

Was mache ich falsch?

+0

refer [this] (http://stackoverflow.com/a/36260089/5733111) – Sanoop

+0

Wenn ich das zum Manifest hinzufüge, müssen alle Benutzer unter Android 6.0 diese Berechtigung vor der Installation der App gewähren ... – Ginso

Antwort

5

android.permission.INTERNET Persmission kommt unter automatisch gewährte Persmission daher muss nicht danach gefragt werden.

Hier ist die Liste der automatisch erteilten Berechtigungsliste. Diese Berechtigungen werden bei der Installation automatisch erteilt und können nicht widerrufen werden.

android.permission.ACCESS_LOCATION_EXTRA_COMMANDS 
android.permission.ACCESS_NETWORK_STATE 
android.permission.ACCESS_NOTIFICATION_POLICY 
android.permission.ACCESS_WIFI_STATE 
android.permission.ACCESS_WIMAX_STATE 
android.permission.BLUETOOTH 
android.permission.BLUETOOTH_ADMIN 
android.permission.BROADCAST_STICKY 
android.permission.CHANGE_NETWORK_STATE 
android.permission.CHANGE_WIFI_MULTICAST_STATE 
android.permission.CHANGE_WIFI_STATE 
android.permission.CHANGE_WIMAX_STATE 
android.permission.DISABLE_KEYGUARD 
android.permission.EXPAND_STATUS_BAR 
android.permission.FLASHLIGHT 
android.permission.GET_ACCOUNTS 
android.permission.GET_PACKAGE_SIZE 
android.permission.INTERNET 
android.permission.KILL_BACKGROUND_PROCESSES 
android.permission.MODIFY_AUDIO_SETTINGS 
android.permission.NFC 
android.permission.READ_SYNC_SETTINGS 
android.permission.READ_SYNC_STATS 
android.permission.RECEIVE_BOOT_COMPLETED 
android.permission.REORDER_TASKS 
android.permission.REQUEST_INSTALL_PACKAGES 
android.permission.SET_TIME_ZONE 
android.permission.SET_WALLPAPER 
android.permission.SET_WALLPAPER_HINTS 
android.permission.SUBSCRIBED_FEEDS_READ 
android.permission.TRANSMIT_IR 
android.permission.USE_FINGERPRINT 
android.permission.VIBRATE 
android.permission.WAKE_LOCK 
android.permission.WRITE_SYNC_SETTINGS 
com.android.alarm.permission.SET_ALARM 
com.android.launcher.permission.INSTALL_SHORTCUT 
com.android.launcher.permission.UNINSTALL_SHORTCUT 

siehe this für mehr

+0

If Die targetSdkVersion der Anwendung ist auf 23+ festgelegt. – David

+0

Warum schlägt mein Wenn-Test dann nicht fehl? – Ginso

+0

Ihr if-Test scheitert nicht, weil diese Berechtigung bereits vergeben ist .... – Opiatefuchs

0

Welche targetSDKVersion hast du eingestellt? Sie müssen es auf 23 setzen, ansonsten wird die Berechtigungsrichtlinie von älteren Plattformen stammen.

+0

ist es nicht in älteren Plattformen möglich? Immerhin wurde diese Methode lange vor API 23 eingeführt. – Ginso

+0

In allen Plattformen unter 23 fordern Sie die Berechtigung zum Zeitpunkt der Installation an, und Sie müssen sie nur im Manifest registrieren. Am 23. Ändern Sie dieses Verhalten, und Sie können die Berechtigung anfordern, indem Sie den Dialog anzeigen und z. wenn Sie eine Netzwerkverbindung zulassen möchten. Sie können älteres Verhalten (zur Installationszeit fragen) bei 23 halten, indem Sie targetSdk niedriger als 23 setzen, oder new verwenden, indem Sie es auf 23 (oder höher) setzen, aber auf älteren Plattformen werden die Berechtigungen zur Installationszeit noch abgefragt. –

1

android.permission.INTERNET Erlaubnis ist eine normale Erlaubnis. So wird es automatisch ohne Dialog gewährt. Sehen Sie mehr Details here.

+0

aber ich entwickle nicht für API 23 – Ginso

+0

Ich glaube, Sie missverstehen den Zweck von ActivityCompat.requestPermissions. Es legt zur Laufzeit keine Berechtigungen fest, sondern fordert nur die Erteilung gefährlicher Berechtigungen an, die bereits im Manifest hinzugefügt wurden. – manao

+0

Was ist der Grund dafür, eine Erlaubnis anzufordern, die Benutzer bei der Installation der App bereits geben müssen? Wenn Sie meinen Beitrag lesen, wissen Sie, dass ich es zur Laufzeit anfordern möchte und nicht nur – Ginso