In onRequestPermissionsResult grantResults on some device return empty when user decline the permission(在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中,当用户拒绝权限时,某些设备上的结果返回空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在onRequestPermissionsResult grant中,当用户拒绝权限时,某些设备上的结果返回空


- Android - 拆分 Drawable 2022-01-01
- android 4中的android RadioButton问题 2022-01-01
- Android viewpager检测滑动超出范围 2022-01-01
- 用 Swift 实现 UITextFieldDelegate 2022-01-01
- 在测试浓缩咖啡时,Android设备不会在屏幕上启动活动 2022-01-01
- 使用自定义动画时在 iOS9 上忽略 edgesForExtendedLayout 2022-01-01
- 如何检查发送到 Android 应用程序的 Firebase 消息的传递状态? 2022-01-01
- 想使用ViewPager,无法识别android.support.*? 2022-01-01
- Android - 我如何找出用户有多少未读电子邮件? 2022-01-01
- MalformedJsonException:在第1行第1列路径中使用JsonReader.setLenient(True)接受格式错误的JSON 2022-01-01