在Android应用程序的主要活动中,我检查权限(Manifest.permission.MANAGE_DOCUMENTS),检测我没有它们,并调用requestPermisions.然后onRequestPermissionResult我几乎立即被拒绝许可,没有显示对话框.
我已经在同一个应用程序的另一个活动中确认了相同的权限(通过requestPermissions再次,这有效),所以我期望这个决定被存储(对于会话,或者其他),我从未选择拒绝该权限.无论哪种方式,都不会显示权限对话框,并且会自动拒绝权限.
到目前为止,我已经在Android 7和6(API 24和23)的模拟器上进行了测试.
我试过了:
我很难过......
这是权限请求(请参阅代码中的注释):
private fun askForPermissionOrSendRequest(view: View, permission: String) {
if (checkSelfPermission(permission) == PackageManager.PERMISSION_DENIED) {
if (shouldShowRequestPermissionRationale(permission)) {
cachedView = view
val explanationDialog = AlertDialog.Builder(this).setMessage("We need permissions to read your storage in order to show your profile image.").setOnDismissListener {
requestPermissions(
arrayOf(permission),
BSMainActivity.permissionRequestSendProfilePic
)
}.create()
explanationDialog.show()
} else {
cachedView = view
// this branch is always hit - the permission seems to be missing every time
requestPermissions(
arrayOf(permission),
BSMainActivity.permissionRequestSendProfilePic
)
}
} else {
sendRequest(view)
}
}
Run Code Online (Sandbox Code Playgroud)
我立即进入结果处理程序而没有显示向上询问我权限的对话框.我可能会或可能不会在同一个应用程序的另一个(子)活动中确认相同的权限(似乎没有任何区别).
override fun onRequestPermissionsResult(requestCode: Int,
permissions: Array<String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
when (requestCode) {
BSMainActivity.permissionRequestSendProfilePic -> {
// This gets hit, MANAGE_DOCUMENTS was denied
if (permissions.contains(Manifest.permission.MANAGE_DOCUMENTS) && grantResults[permissions.indexOf(Manifest.permission.MANAGE_DOCUMENTS)] == PackageManager.PERMISSION_DENIED) {
Log.w(logName, "Permission to open image was denied while sending a tag request: %s %s".format(
permissions.joinToString(",", "[", "]"),
grantResults.joinToString(",", "[", "]")
))
}
// send request regardless of the result for now
sendRequest(cachedView)
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我的清单中,我有以下内容:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="me.monomon.bs">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1557 次 |
| 最近记录: |