请求权限后Android 6.0关闭应用程序会导致每次要求权限3次

时间:2016-02-25 02:00:34

标签: android permissions android-6.0-marshmallow

在尝试更新我的应用以使用Android 6.0权限时,我遇到了一个奇怪的错误(我认为)。我的代码如下:

public void requestPerms2() 
    boolean gratedPermissions = false;
    PackageManager pm = this.getPackageManager();

    int hasPerm1 = PackageManager.PERMISSION_GRANTED; //Assume granted on low level
    if(android.os.Build.VERSION.SDK_INT > 15) {
        hasPerm1 = pm.checkPermission(
                Manifest.permission.READ_EXTERNAL_STORAGE,
                this.getPackageName());
    }
    int hasPerm2 = pm.checkPermission(
            Manifest.permission.RECORD_AUDIO,
            this.getPackageName());

    if(hasPerm1 != PackageManager.PERMISSION_GRANTED){
        String [] neededPerms = {some.path.here.Manifest.permission.READ_EXTERNAL_STORAGE};
        ActivityCompat.requestPermissions(this, neededPerms , 1);
        gratedPermissions = true;
    }

    if(hasPerm2 != PackageManager.PERMISSION_GRANTED){
        String [] neededPerms = {some.path.here.Manifest.permission.RECORD_AUDIO};
        ActivityCompat.requestPermissions(this, neededPerms , 1);
        grantedPermissions = true;
    }
    if(grantedPermissions)
        System.exit(0);
}

这是在从onCreate调用的方法中,并且肯定只调用一次(我有一些调试语句)。但是,它将提示用户每次3次权限。我尝试改变所请求的权限,它总是要求3次。如果我注释掉System.exit(0),它可以完美地工作并且每个用户一次询问用户。

理想情况下,我希望在获得权限并强制重新启动后关闭应用,因为权限将在应用重启后才会应用。有没有办法这样做而不要求用户每次允许3次权限?

1 个答案:

答案 0 :(得分:1)

我会把它作为评论,但我还不够信誉:( 如果您请求的权限需要重新启动,Android将自动重启您的应用并调用onCreate。然后,您可以使用回调:

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults){
    if(requestCode == 101)
    {
        if( (grantResults[0] == PackageManager.PERMISSION_DENIED) || (grantResults[1] == PackageManager.PERMISSION_DENIED) ) {
            Toast.makeText(getApplicationContext(),"Unable to get permissions for ...",Toast.LENGTH_LONG).show();
        }
    }
}

然后检查是否已授予适当的权限。 这将无需退出应用程序。