【发布时间】:2016-01-19 13:49:18
【问题描述】:
遇到问题了,我不确定是否是错误。
如果用户授予权限,然后随后撤消该权限,则 checkSelfPermission 似乎对已撤消的权限返回 GRANTED。
例如看来撤销permission.CAMERA后:
true == ActivityCompat.checkSelfPermission(context, permission.CAMERA)
== PackageManager.PERMISSION_GRANTED
我似乎发现相机被撤销的唯一方法是例外:
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)
有谁知道这是用户错误还是新权限系统中的错误?
【问题讨论】:
-
我无法使用this sample app 重现您的问题。我运行该应用程序,它会在首次运行时请求权限。我授予它们,然后转到设置并撤销它们。我回到示例应用程序并单击“拍照”按钮。该应用程序正确检测到我没有权限并为此显示黄色横幅。我再次点击“拍照”,系统提示我撤销的权限。刚刚在运行 6.0 的 Nexus 5 上进行了测试。
-
很高兴知道,那可能是用户错误,我会继续挖掘。
-
美好的一天。我也有同样的问题。关键是我的应用程序的目标 SDK 不是 23(Marshmallow)而是 22(Lolipop)。我在带有 android 6.0 的 Nexus 5 上运行我的应用程序。我去设置,我禁用我的应用程序的一些权限。当我返回我的应用程序并调用 ContextCompat.checkSelfPermission() 以获得我的许可时,结果是 PERMISSION_GRANTED。问题是如果应用程序以 android 5.1 lolipop api 为目标,如何检测到 android 6.0 设备上的应用程序的权限被撤销
-
你不应该这样做,因为你的应用在 22 中,应用权限是默认授予的。
标签: android permissions android-6.0-marshmallow