多个运行时权限 - 仅请求第一个

时间:2017-07-20 15:44:56

标签: android permissions

我正在尝试在应用程序启动时请求多个权限,但只会询问其中一个权限,然后屏幕会冻结。我正在尝试要求:READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGECAMERABODY_SENSORS

令我困惑的是,我启动此应用程序只是要求读取和写入权限,它会要求它们,那就是,应用程序的其余部分将顺利运行,但在添加其他两个应用程序之后冻结。

旁注:这有点令人讨厌,但我做权限的方式是我马上要求它们,所以当应用程序打开并且权限弹出窗口出现时它仍然是白屏。在接受读/写权限后,应用冻结并保持在此白色屏幕上。此外,我绝对还将权限添加到我的清单中。

我将包括我的权限调用之一,因为所有其他内容实际上是相同的,只需更改需要的权限。下面我列出了CAMERA的样子:

    int permissionCheck3 = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA);

    if(permissionCheck3 != PackageManager.PERMISSION_GRANTED){
        if(ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)){
            showExplanation("Permission Needed", "Rationale", Manifest.permission.CAMERA, REQUEST_PERMISSION_CAMERA);
        } else {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_PERMISSION_CAMERA);
        }
    }

    while(permissionCheck3 != PackageManager.PERMISSION_GRANTED){
        permissionCheck3 = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA);
    }

在我分配TextViews,Buttons和其他类似的东西后,我在我的onCreate应用程序的最开始使用上面的代码。

private void showPhoneStatePermissionCAMERA(boolean displayToast){
    int permissionCheckCAMERA = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA);
    if(permissionCheckCAMERA != PackageManager.PERMISSION_GRANTED) {
        if(ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
            showExplanation("Permission Needed", "Rationale", Manifest.permission.CAMERA, REQUEST_PERMISSION_CAMERA);
        } else {
            requestPermission(Manifest.permission.CAMERA, REQUEST_PERMISSION_CAMERA);
        }
    } else {
        if(displayToast){
            Toast.makeText(SignIn.this, "CAMERA Permission (already) Granted!", Toast.LENGTH_SHORT).show();
        }
    }
}

更多信息:我已经对它进行了一些测试,并且发生了一些有趣的事情:当我第一次进入应用程序时,它会请求第一个权限,然后冻结。如果我退出应用程序并重新打开它,它会请求第二个权限,然后冻结,依此类推,直到所有权限被接受或拒绝,然后继续使用该应用程序。

也许无关,但是当我在应用程序启动之前点击运行时,我会继续java.util.zip.ZipException: File too short to be a zip file: 0一次或两次。

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

在授予Activity之后,Permission被销毁并重新创建的事实可能是问题的一部分:

你要求获得第一个许可,你得到它并且你要求第二个Permission(所以你想要开始一个不属于你的app的Dialog并等待结果 - 但是也许运行时不会为正在关闭的应用程序显示新的Dialog?)

另外,你有while循环,阻止你的UI线程,直到Permission被授予。在DialogCAMERA)甚至出现的情况下,它将永远循环。

每当您向用户请求Permission时,您都会在onRequestPermissionsResult()中获得结果。此时您可以执行下一步,例如请求下一个Permission