本文介绍了在onRequestPermissionsResult grant中,当用户拒绝权限时,某些设备上的结果返回空的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在快照中:,在onRequestPermissionsResult
中当用户拒绝权限时,某些设备上的结果返回空,而某些设备上的结果具有值PackageManager.PERMISSION_DENIED
。
我已经根据https://stackoverflow.com/a/31925748/2941375答案为运行时权限实现了标识用户已选择已接受、拒绝和拒绝且不再询问的解决方案。
根据我见过的许多文档,如果用户拒绝权限,则返回 我使用的代码grantResults
空else if (grantResults[0] == PackageManager.PERMISSION_DENIED)
,因此在else if
部分引发Arrayindexoutofbound异常
当用户拒绝权限
grantResults
不是时,我测试了代码
适用于我的情况,但我已在交换矩阵控制台上看到
grantResults
有许多崩溃,arrayindexoutofbound
,
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case PermissionManager.MY_PERMISSIONS_REQUEST_LOCATION_ACCESS: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
DefineLocationService.start(this);
startNextActivity(0);
} else if (grantResults[0] == PackageManager.PERMISSION_DENIED) {
boolean showRationale = ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[0]);
if (!showRationale) {
// user also CHECKED "never ask again"
// you can either enable some fall back,
// disable features of your app
// or open another dialog explaining
// again the permission and directing to
// the app setting
startNextActivity(ARTIFICIAL_DELAY_MILLIS);
} else if (!PermissionManager.MY_REQUESTED_DIALOG) {
PermissionManager.checkLocationPermission(this);
} else {
startNextActivity(0);
}
} else {
startNextActivity(ARTIFICIAL_DELAY_MILLIS);
}
}
}
}
谁能解释一下,当用户拒绝权限时,为什么有些设备返回grantResults
为空,而有些设备返回grantResults
有值和拒绝。
我测试了很多次,但grantResults
我这边从来没有空过,但是控制台上有崩溃,这意味着在某些情况下它是空的,grantResults[0]
抛出异常。
推荐答案
根据the documentation:
注意:权限请求与用户的交互可能会中断。在这种情况下,您将收到应视为取消的空权限和结果数组。
如何处理取消完全由您决定(重新请求权限、将其视为拒绝等),因此只需确保在代码中说明这种情况。
这篇关于在onRequestPermissionsResult grant中,当用户拒绝权限时,某些设备上的结果返回空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!