首页 > 解决方案 > 运行时权限不起作用,手动执行

问题描述

我制作了一个使用 2 个模块的 Android 应用程序(目标 SDK 27),一个由我制作,另一个已导入。最后一个模块需要使用 CAMERA 和 EXTERNAL STORAGE(读/写),因此清单文件包含必要的行。

此外,我在运行时检查并询问这些权限,用户可以授予或不授予访问权限。当我进入“应用程序设置”时,CAMERA 和 STORAGE都已打开。一切似乎都很好。

但是,在使用相机拍照或从图库中选择一张照片后,该应用程序会崩溃。

另一方面,如果我在应用程序设置上手动授予这些权限,一切正常!

任何想法?

清单权限

    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

TEST Thread 在 Activity 执行前不断检查权限

    private void checkPermissions(){
        new Thread(new Runnable() {
            @Override
            public void run() {
                while(!hasStorageAccess()){
                    requestStoragePermission();
                }
                while (!hasCameraAccess()) {
                    requestCameraPermission();
                }
                init();
            }
        }).start();
    }

运行时权限(在我制作的其他应用上完美运行)

    private boolean hasCameraAccess() {
        return ContextCompat.checkSelfPermission(ScanActivity.this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED;
    }

    private void requestCameraPermission() {
        ActivityCompat.requestPermissions(ScanActivity.this, new String[]{Manifest.permission.CAMERA}, PERMISSIONS_REQUEST_USE_CAMERA);
    }

    private boolean hasStorageAccess() {
        return ContextCompat.checkSelfPermission(ScanActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
    }

    private void requestStoragePermission() {
        ActivityCompat.requestPermissions(ScanActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, PERMISSIONS_REQUEST_USE_STORAGE);
    }

标签: javaandroidpermissionsruntime

解决方案


推荐阅读