Android 6 widerrufen Sie Berechtigungen überprüft gewährt
Haben Sie ein problem hat-ich bin nicht sicher, ob ein bug ist oder nicht.
Wenn der Benutzer berechtigt eine und dann später widerruft, es scheint, dass checkSelfPermission gibt ERTEILT die Erlaubnis widerrufen.
z.B. es scheint, dass nach dem Widerruf der Erlaubnis.KAMERA:
true == ActivityCompat.checkSelfPermission(context, permission.CAMERA)
== PackageManager.PERMISSION_GRANTED
Die einzige Art, wie ich scheinen, um herauszufinden, dass die Kamera gesperrt wurde, ist durch eine Ausnahme:
10-20 14:25:54.330: E/AndroidRuntime(13954): java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 cmp=com.google.android.GoogleCamera/com.android.camera.CaptureActivity clip={text/uri-list U:file:///storage/emulated/0/Pictures/JPEG_20151020_142554_399504353.jpg} (has extras) } from ProcessRecord{adc5d77 13954:com.conx2share.conx2share.staging/u0a144} (pid=13954, uid=10144) with revoked permission android.permission.CAMERA
10-20 14:25:54.330: E/AndroidRuntime(13954): at android.os.Parcel.readException(Parcel.java:1599)
10-20 14:25:54.330: E/AndroidRuntime(13954): at android.os.Parcel.readException(Parcel.java:1552)
10-20 14:25:54.330: E/AndroidRuntime(13954): at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2658)
10-20 14:25:54.330: E/AndroidRuntime(13954): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1507)
10-20 14:25:54.330: E/AndroidRuntime(13954): at android.app.Activity.startActivityForResult(Activity.java:3917)
10-20 14:25:54.330: E/AndroidRuntime(13954): at android.app.Activity.startActivityForResult(Activity.java:3877)
10-20 14:25:54.330: E/AndroidRuntime(13954): at android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.java:855)
10-20 14:25:54.330: E/AndroidRuntime(13954): at android.support.v4.app.FragmentActivity$HostCallbacks.onStartActivityFromFragment(FragmentActivity.java:907)
10-20 14:25:54.330: E/AndroidRuntime(13954): at android.support.v4.app.Fragment.startActivityForResult(Fragment.java:930)
Weiß jemand, ob das Benutzer-Fehler oder ein bug im neuen Berechtigungssystem?
- Ich kann nicht reproduzieren Sie Ihr problem dieses sample-app. Ich starte das app, und es fragt nach Berechtigungen, auf den ersten run. Ich gewähre Ihnen, dann gehen Sie zu Einstellungen, und widerrufen Sie. Ich gehe zurück in die Beispiel-app, und klicken Sie auf die "Bild" - Taste. Die app erkennt korrekt, dass ich nicht die Berechtigungen und zeigt einen gelben banner zu diesem Effekt. Ich tippe auf "Foto aufnehmen" erneut, und ich bin aufgefordert, die Berechtigungen, die ich widerrufen. Getestet nur jetzt auf einem Nexus 5 laufen 6.0.
- Gut zu wissen, es kann sein, user error dann, ich werde weiter Graben.
- Guten Tag. Ich habe das gleiche problem. Der Punkt ist, dass die target-SDK-meine app ist nicht 23(Marshmallow), aber 22 (Lolipop). Ich starte meine app auf dem Nexus 5 mit android 6.0. Ich gehe auf Einstellungen und deaktiviere ich eine Berechtigung für meine app. Wenn ich zurück in meine app und call ContextCompat.checkSelfPermission() für meine Erlaubnis, das Ergebnis ist PERMISSION_GRANTED. Die Frage ist, wie zu erkennen, wurde die Erlaubnis entzogen app auf android 6.0-Gerät, wenn die app Ziele android 5.1 lolipop-api
- Sollten Sie das nicht tun müssen, da Sie für Ihre app in 22, app-Berechtigungen sind standardmäßig gewährt.
InformationsquelleAutor Brill Pappin | 2015-10-20
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin ein wenig spät zur party, aber ich hatte gerade dieses problem und denken sollte für jemanden nützlich sein in der Zukunft.
Laut Google link https://developers.google.com/android/guides/permissions#prerequisites
So, wenn Sie auf Ihre app SDK level 23 oder höher, Berechtigungen deklariert AndroidManifest.xml sind nicht genug (obwohl notwendig). Sicherzustellen, dass Sie die V4 support library und das check-wie unten gezeigt:
In meinem Fall, ich habe den check auf einen
Fragment
, aber getan werden könnte, in einemActivity
es hängt von Ihren Bedürfnissen ab.Kann der Benutzer die grant-Berechtigung für die app, gehen Sie zu Einstellungen > Apps > yourapp und erteilt dann die Genehmigung. In diesem Fall, die Logik geht durch die
else
und die Absicht genannt wird.In der anderen hand, das Leben ist nicht so einfach und der user wird das nicht tun. Deshalb haben wir zu nennen ActivityCompat.requestPermissions:
Im ersten parameter ich übergeben
getActivity()
weil ich bin mit einemFragment
. Wenn Sie mitActivity
, passthis
. Der zweite parameter ist die Berechtigung geprüft und die Dritte ist eine app definiertint
Konstante verwendet werden als Bezeichner in der callback-Methode, die ich werde erklären, weiter.ActivityCompat.requestPermissions
öffnet sich ein Dialogfeld den Benutzer auffordert, zu gewähren oder verweigern die Erlaubnis. Deshalb haben wir die Verwendung der MethodeonRequestPermissionsResult
:Falls Sie mit
Fragment
, wie mich, dieser callback-Methode werden in derActivity
enthält dieFragment
.CAMERA
imManifest.permission.CAMERA
Dieser entpuppt sich ein Programmierer Fehler in der Logik.