首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在requestPermission上自动拒绝MainActivity的安卓权限

在requestPermission上自动拒绝MainActivity的安卓权限
EN

Stack Overflow用户
提问于 2016-10-07 22:38:37
回答 1查看 3K关注 0票数 9

在Android应用程序的主要活动中,我检查权限(Manifest.permission.MANAGE_DOCUMENTS),检测我没有它们,并调用requestPermisions。然后,在onRequestPermissionResult中,我几乎立即被拒绝了许可,没有一个对话框显示。

我已经在同一应用程序的另一个活动中确认了相同的权限(再次通过requestPermissions,这是可行的),所以我希望这个决定被存储(用于会话或其他什么),而且我从未选择拒绝该权限。无论哪种方式,都不会显示权限对话框,并且权限将自动被拒绝。

到目前为止,我已经在Android 7和6 (API 24和23)的模拟器上测试了这一点。

我试过:

我很困惑..。

以下是权限请求(请参阅代码中的注释):

代码语言:javascript
复制
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)
    }
}

我立即到达结果处理程序,而没有出现一个对话框来询问我的权限。我可能已经或可能没有在同一应用程序的另一个(子)活动中确认相同的权限(似乎没有什么不同)。

代码语言:javascript
复制
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)
        }
    }
}

在我的清单中,我有以下内容:

代码语言:javascript
复制
<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"/>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-07 23:09:47

只有危险权限可以在运行时被请求,而MANAGE_DOCUMENTS不是一个危险的权限。

根据文件文件

此权限只应由平台文档管理应用程序请求。此权限不能授予第三方应用程序。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39926690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档