关闭 Android 6.0及更高版本Android Runtime Permission(二)

来源:互联网 发布:动易软件招聘 编辑:程序博客网 时间:2024/05/13 12:14

处理 “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” 也正常显示合理的请求对话框

0 0