我向我的应用程序添加了某些权限,例如允许访问摄像头,并且一切正常。但是,当我最小化该应用程序并禁用该权限然后打开该应用程序时,该应用程序崩溃而没有要求我重新启用该权限(直到我关闭该应用程序然后将其打开)。我如何解决此错误,以使应用程序不会崩溃并再次询问权限或安全重启以询问权限。

这是我的代码

在主要活动中:

onCreate:

 if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.CAMERA},
                    GlobalVariables.MY_PERMISSIONS_REQUEST_CAMERA);
        }


@Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode)
        {

            case GlobalVariables.MY_PERMISSIONS_REQUEST_CAMERA:
            {
                if (grantResults.length <= 0
                        || grantResults[0] != PackageManager.PERMISSION_GRANTED) {
                    globalVariables.ShowOKAlert("Error","Please Accept All Requested Permissions or the app wont function properly",this,false);
                }
                return;
            }
        }
    }


该活动实现了ActivityCompat.OnRequestPermissionsResultCallback

最佳答案

步骤1:

 String[] permissions = new String[]{
    Manifest.permission.INTERNET,
    Manifest.permission.READ_PHONE_STATE,
    Manifest.permission.READ_EXTERNAL_STORAGE,
    Manifest.permission.WRITE_EXTERNAL_STORAGE,
 };


第2步:-

private boolean checkPermissions() {
    int result;
    List<String> listPermissionsNeeded = new ArrayList<>();
    for (String p : permissions) {
        result = ContextCompat.checkSelfPermission(this, p);
        if (result != PackageManager.PERMISSION_GRANTED) {
             listPermissionsNeeded.add(p);
        }
    }
    if (!listPermissionsNeeded.isEmpty()) {
        ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), 100);
        return false;
    }
    return true;
}


第三步:

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    if (requestCode == 100) {
        if (grantResults.length > 0
            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        // do something
        }
        return;
    }
}

10-07 19:19
查看更多