如果用户第二次拒绝权限,请禁用出现的“不再询问”单选按钮

时间:2019-06-17 16:25:22

标签: java android android-permissions

我的应用需要权限才能运行。如果用户拒绝初次运行的权限,它将关闭。如果他们第二次运行该应用程序并再次拒绝其权限,则第三次尝试运行该应用程序并请求权限时,对话框中还将出现一个单选按钮,其中包含“不再询问”选项。如果用户单击该按钮,则该应用程序将关闭,并且下次运行该应用程序时,将不会询问权限,从而导致无休止的漏洞。用户将打开该应用程序,并且该应用程序将永远崩溃,除非他们卸载并重新安装该应用程序。我们如何解决这个问题?我们可以编写代码,以便无论用户拒绝许可多少次都不会出现单选按钮?我还有其他不明显的方式吗?我知道这将是一个挑战...

public void requestPermissions() {
    //Requesting permissions.
    ActivityCompat.requestPermissions(this,new String[] {
            Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.RECORD_AUDIO
    }, REQUEST_PERMISSION_CODE);
}

public boolean checkPermissionFromDenice() {
    //Checking whether permissions have been granted.
    int write_external_storage_result = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
    int record_audio_result = ContextCompat.checkSelfPermission(this,Manifest.permission.RECORD_AUDIO);
    return write_external_storage_result == PackageManager.PERMISSION_GRANTED && record_audio_result == PackageManager.PERMISSION_GRANTED;
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    //Returns user's input regarding the requested permissions.
    if (requestCode == REQUEST_PERMISSION_CODE) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(this, "Permission granted", Toast.LENGTH_SHORT).show();
            finish(); //Killing the activity in case user accepts permissions so they set in.
        } else {
            Toast.makeText(this, "Permission not granted", Toast.LENGTH_SHORT).show();
            finishAffinity(); //Terminating the application in case user denies permissions.
        }
    }
}

1 个答案:

答案 0 :(得分:3)

您应该针对不愿授予权限的用户强化应用程序。您应警告他们该应用程序将无法运行,并且如果以后未授予该权限,请向用户说明如何重置其权限设置,否则将拒绝运行该应用程序的其余部分。

请注意,这是一项严厉措施,只有在您的应用程序功能绝对需要许可的情况下,才应这样做。如果某些功能未经此特殊许可仍可以使用,那么您仍应允许用户使用它们。