我想在运行时请求权限。我签出了官方的android开发人员网站,它说如果以前拒绝了权限,则shouldShowRequestPermissionRationale返回true,如果拒绝了权限,则返回false,并且不再询问复选框。 然后我在网站上看到了这段代码:
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.READ_CONTACTS)) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed; request the permission
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
}
我的两个问题是:
1)如果以前未向用户请求权限会发生什么?我们需要问他对吗?您将代码放在哪里?
2)即使用户选中了“不再询问”复选框,以上代码也要求获得许可(当shoesShowRequestPermissionRationale在else块中返回false时)。当用户选中该选项时,您如何请求许可?
答案 0 :(得分:0)
要回答两个问题:
您可以首先使用checkSelfPermission()
来查看权限是否已经被授予。如果尚未批准,则应检查shouldShowRequestPermissionRationale()
返回true还是false。
shouldShowRequestPermissionRationale()
在以下情况下将返回true:
shouldShowRequestPermissionRationale()
在以下两种情况下将返回false:
因此,如果shouldShowRequestPermissionRationale()
返回false,那么您可以做的是
您可以使用布尔型偏好值(默认值为true)来检查
在其他情况下的首次许可请求(如果是第一次)
请求,然后触发requestPermissions
否则,如果这不是第一个请求,并且用户先前已经拒绝了该请求,并且还选中了“不再询问”复选框,则可以显示一个简单的祝酒词,说明无法使用该功能的原因权限,并提及通过设置手动启用它的步骤。
类似这样的东西:
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.READ_CONTACTS)) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
if(isFirstTimeRequest){
// No explanation needed; request the permission
// RESET PREFERENCE FLAG
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
} else {
// User denied previously and has checked "Never ask again"
// show a toast with steps to manually enable it via settings
}
}