如何让用户必须允许某些权限才能继续使用应用

时间:2017-06-02 04:09:32

标签: android permissions

我正在开发一个应用程序,其中编写内部存储的权限至关重要。当我请求api> 23的许可时,有一个选项可以永远不再显示请求权限对话框。我想禁用它,因为如果用户选择拒绝并且检查再也不显示请求对话框,那么用户将不得不亲自去设置并清除应用程序引用自己,我想避免。如果用户选择拒绝,我也想继续请求权限,但是在grantResults [0]中导致java.lang.ArrayIndexOutOfBoundsException错误。

总结我的问题: 1.如何禁用"再也不显示检查" 2.我的错误修复

如果用户选择拒绝,请在此处再次请求权限:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode) {
        case PERMISSION_WRITE_EXTERNAL_STORAGE:
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Update();
            } else {
                ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSION_WRITE_EXTERNAL_STORAGE);
            }
            break;
    }
}

2 个答案:

答案 0 :(得分:2)

您无法阻止用户永久拒绝该权限。当用户执行需要该权限的操作并且权限被拒绝时,您可以闪烁消息 - 例如Toast或Snackbar。

答案 1 :(得分:1)

试试这个我的朋友

 String permission = Manifest.permission.WRITE_EXTERNAL_STORAGE;
    int grant = ContextCompat.checkSelfPermission(this, permission);
    if (grant != PackageManager.PERMISSION_GRANTED) {
        String[] permission_list = new String[1];
        permission_list[0] = permission;
        ActivityCompat.requestPermissions(this, permission_list, 1);
    }



@Override
    public void onRequestPermissionsResult ( int requestCode, @NonNull String[] permissions,
    @NonNull int[] grantResults){
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 1) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(AccountClass.this, "permission  granted", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(AccountClass.this, "permission not granted", Toast.LENGTH_SHORT).show();
            }
        }

    }