有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android应用程序不请求摄像头许可

我正在开发一个SDK(.aar),第三方可以使用它。在我的示例应用程序中,当我使用aar时,我可以看到应用程序没有提示相机许可。当我打开aar,看到它的清单。xm,它包含以下内容:

<!-- WRITE_EXTERNAL_STORAGE is needed because we are storing there the config files of KM -->
<uses-permission 安卓:name="安卓.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission 安卓:name="安卓.permission.read_external_storage" />
<uses-permission 安卓:name="com.samsung.安卓.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY" />
<uses-permission 安卓:name="安卓.permission.CAMERA" />

<uses-feature 安卓:name="安卓.hardware.camera" />
<uses-feature 安卓:name="安卓.hardware.camera.autofocus" />
<uses-feature 安卓:name="安卓.hardware.sensor.accelerometer" />

既然相机是作为一个必需的权限出现的,谁能告诉我为什么在安装示例应用程序时它没有出现


共 (2) 个答案

  1. # 2 楼答案

    以下是我检查权限的方式:

        public boolean permissionsGranted() {
    
        boolean allPermissionsGranted = true;
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) {
            boolean hasWriteExternalPermission = (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED);
            boolean hasReadExternalPermission = (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED);
            boolean hasCameraPermission = (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED);
            if (!hasWriteExternalPermission || !hasReadExternalPermission || !hasCameraPermission) {
                allPermissionsGranted = false;
            }
        }
        return allPermissionsGranted;
    }
    

    如果permissionsGranted()方法返回false,我就是这样发出请求的

     String[] permissions = {android.Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.CAMERA, android.Manifest.permission.READ_EXTERNAL_STORAGE};
                            ActivityCompat.requestPermissions(this, permissions, 1);
    

    你必须重写onRequestPermissionsResult方法,下面是我的方法

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case 1: {
                boolean startActivity = true;
                for (int i = 0; i < grantResults.length; i++) {
                    if (grantResults.length > 0 && grantResults[i] != PackageManager.PERMISSION_GRANTED) {
                        String permission = permissions[i];
                        boolean showRationale = shouldShowRequestPermissionRationale(permission);
                        if (!showRationale) {
                            Intent intent = new Intent();
                            intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                            Uri uri = Uri.fromParts("package", getActivity().getPackageName(), null);
                            intent.setData(uri);
                            startActivityWithIntent(intent);
                            Toast.makeText(this, "Enable required permissions", Toast.LENGTH_LONG).show();
                            startActivity = false;
                            break;
                        } else {
                            Toast.makeText(this, "Enable required permissions", Toast.LENGTH_LONG).show();
                            break;
                        }
                    }
                }
                if(startActivity) {
                    getActivity().finish();
                    startActivityWithIntent(getIntent());
                }
            }
        }
    }
    
    public void startActivityWithIntent(Intent intent){
        startActivity(intent);
    }
    

    ShowRegulation是检查用户是否勾选了never ask,如果勾选了,则我启动设置活动,以便用户可以启用权限

    如果你需要更清晰的信息,请告诉我