【发布时间】:2018-11-05 13:27:36
【问题描述】:
目前我正在编写一个读取用户电话号码的安卓应用程序。因为该应用程序是为 SDK 23+(目标 sdk 27)开发的,所以我必须请求读取短信权限。如果用户第一次拒绝该权限,则应出现一个对话框,解释电话号码的使用。然后用户可以选择再次请求权限或手动输入电话号码。如果用户勾选“不再询问”,则会出现一个对话框,指示用户通过设置允许权限。
为了检查用户是否勾选了不再询问,我使用了方法 shouldShowRequestPermissionRationale。但是该方法总是返回 false,即使我从来没有打勾也不会再问。
以下是相关代码:
public class SettingsSettingsFragment extends Fragment implements ActivityCompat.OnRequestPermissionsResultCallback {
public void readNumber() {
if (person.getPhoneNumber() == null || person.getPhoneNumber().equalsIgnoreCase("")) {
if (checkSelfPermission(getActivity(), READ_SMS) != PackageManager.PERMISSION_GRANTED)
requestPermission();
else {
//read phoneNumber
}
}
//request permission send sms
private void requestPermission() {
requestPermissions(new String[]{Manifest.permission.READ_SMS}, PERMISSION_REQUEST_SEND_SMS);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == PERMISSION_REQUEST_SEND_SMS)
if (grantResults[0] == PackageManager.PERMISSION_DENIED) {
// user rejected the permission
boolean showRationale = shouldShowRequestPermissionRationale(Manifest.permission.SEND_SMS);
if (!showRationale) {
// user also CHECKED "never ask again" - show dialog
//show dialog: please allow in settings
} else if (counter < 2) {
// explain the permission, and give the user the possibility to ask once more
counter++;
}
}
为什么 shouldShowRequestPermissionRationale 总是返回 false? 代码来自这里:Android M - check runtime permission - how to determine if the user checked "Never ask again"? 提前感谢您的帮助。
【问题讨论】:
-
如果勾选“不再询问”,总是返回false
标签: android permissions