gpt4 book ai didi

java - Android 运行时权限——用户授予权限,但在 onRequestPermissionsResult 中未接收权限

转载 作者:行者123 更新时间:2023-12-01 09:28:49 25 4
gpt4 key购买 nike

我正在尝试将我的应用程序设置为使用运行时权限。我的请求对话框显示正常,但是当我在对话框上选择“接受”并调用 onRequestPermissionsResult 时,grantResults 不显示 PERMISSION_GRANTED,并且应用程序没有获得权限。以下是我请求许可的方式:

 ActivityCompat.requestPermissions((Activity) contnext,
new String[]{Manifest.permission.MANAGE_DOCUMENTS, Manifest.permission.READ_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);

以及回调:

public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode){
case MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE:
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// do good stuff
Log.i("net.bradmont.prayson", "Permissions granted by user");
} else {
Log.i("net.bradmont.prayson", "Permissions refused by user");
Log.i("net.bradmont.prayson", "grantResults.length " + grantResults.length);
for (int i = 0; i < grantResults.length; i++){
Log.i("net.bradmont.prayson", "grantResults[" + i +"]" + grantResults.length);
}
Snackbar snackbar1 = Snackbar.make(mCoordinator,
R.string.cant_open_file_no_permission, Snackbar.LENGTH_LONG);
snackbar1.show();
}

}
}

结果是,在接受权限对话框后,应用程序显示错误 snackbar 。以下是 logcat 中显示的内容:

net.bradmont.prayson  I  Permissions refused by user
I grantResults.length 2
I grantResults[0]2
I grantResults[1]2

我什至不知道 2 在 grantResults 中代表什么; PackageManager 文档中唯一值为 2 的常量是 COMPONENT_ENABLED_STATE_DISABLED 和 GET_RECEIVERS。

这里到底发生了什么?

最佳答案

首先,您在循环中一遍又一遍地打印 int[] grantResults 的长度而不是值。

for (int i = 0; i < grantResults.length; i++){
Log.i("net.bradmont.prayson", "grantResults[" + i +"]" + grantResults.length);
}

应该是:

for (int i = 0; i < grantResults.length; i++){
Log.i("net.bradmont.prayson", "grantResults[" + i +"]" + grantResults[i]);
}

其次,正如 CommonsWare 所说,Manifest.permission.MANAGE_DOCUMENTS保护级别:签名,这意味着无法将此权限授予第三方应用。 参见documentation for MANAGE_DOCUMENTS .

由于您的第一个请求是 MANAGE_DOCUMENTS,所以难怪 grantResults 中的第一个值不是 PackageManager.PERMISSION_GRANTED。我猜测第二个值实际上是与 Manifest.permission.READ_EXTERNAL_STORAGE 请求相对应的 PERMISSION_GRANTED

长话短说,删除 MANAGE_DOCUMENTS 请求:

ActivityCompat.requestPermissions((Activity) context,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);

关于java - Android 运行时权限——用户授予权限,但在 onRequestPermissionsResult 中未接收权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39627161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com