处理 “Never Ask Again”
如果一个用户拒绝了一个权限请求,则在应用第二次进行权限请求的时候,用户将会得到”Never ask again”的选项,一边阻止应用程序再次对此权限的请求。
如果这个选项在电价DENY之前被选中,下次,我们再次调用requestPermissions方法的时候,这个对话框并不会出现,取而代之的是什么都不执行。
但是,如果在UI的交互过程中,程序并没有任何反馈时,这是非常不合理的。我们需要通过Activity的shouldShowRequestPermissionRationale方法来显示为什么需要相应的权限。
Android允许我们通过设置合理的请求来处理用户选择”Never Ask Again”选项
修改后的核心代码如下:
private void insertDummyContactWrapper() {
// 判断是否已经拥有AndroidManifest.xml中声明的权限
// 如果有的话则直接执行insertDummyContact
int hasWriteContactsPermission = checkSelfPermission(Manifest.permission.WRITE_CONTACTS);
if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
*if(!shouldShowRequestPermissionRationale(Manifest.permission.WRITE_CONTACTS)) {
showMessageOKCancel("You need to allow access to Contacts",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
requestPermissions(new String[] {Manifest.permission.WRITE_CONTACTS},
REQUEST_CODE_ASK_PERMISSIONS);
}
});
return ;
}*
// 如果没有权限,则通过requestPermissions来调用权限请求对话框
requestPermissions(new String[] {Manifest.permission.WRITE_CONTACTS}, REQUEST_CODE_ASK_PERMISSIONS);
return;
}
insertDummyContact();
}
*private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
new AlertDialog.Builder(MainActivity.this)
.setMessage(message)
.setPositiveButton("OK", okListener)
.setNegativeButton("Cancel", null)
.create()
.show();
}*
合理的请求对话框将显示当这个权限第一次请求,即便用户选择了 “Never Ask Again” 也正常显示合理的请求对话框