【问题标题】:Android camera runtime permission error?Android相机运行时权限错误?
【发布时间】:2017-10-02 17:49:01
【问题描述】:

我正在尝试在我的应用程序中使用 Camera2 api,即使我正在使用以下代码检查运行时相机权限。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
                cameraManager.openCamera(cameraId, stateCallBack, null);

            } else {
                if (shouldShowRequestPermissionRationale(Manifest.permission.CAMERA))
                    Toast.makeText(getApplicationContext(), "PLease allow the app to use camera app", Toast.LENGTH_LONG).show();

            }
            ActivityCompat.requestPermissions(CaptureImageActivity.this,new String[]{"android.manifest.permissin.CAMERA"}, CAMERA_REQUEST_RESULT);

        } else {
            cameraManager.openCamera(cameraId, stateCallBack, null);
        }

@Override
public void onRequestPermissionsResult(int requestCode, String[] permission, int[] grantResult) {

    switch (requestCode) {

        case CAMERA_REQUEST_RESULT:
            if (grantResult[0] == PackageManager.PERMISSION_GRANTED) {

                try {
                    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
                      //this method is created because of openCamera method below i don't understand why this method is created
                        return;
                    }
                    cameraManager.openCamera(cameraId, stateCallBack, null);
                } catch (CameraAccessException e) {
                    e.printStackTrace();
                }
            }
            if (grantResult[0] != PackageManager.PERMISSION_GRANTED)
                Toast.makeText(getApplicationContext(), "camera is not granted", Toast.LENGTH_LONG).show();


            break;
        default:
            super.onRequestPermissionsResult(requestCode, permission, grantResult);
            break;
    }
}

我还拥有 AndroidManifest.xml 文件中包含的权限。

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

但是当我运行我的应用程序时,权限对话框没有出现,但是相机没有被授予 toast 出现了。

1) 为什么权限对话框没有出现?

2) 即使没有显示对话框,相机怎么没有被授予 toast 出现?我搜索了很多,但没有任何帮助!

【问题讨论】:

    标签: android android-6.0-marshmallow runtime-permissions


    【解决方案1】:

    这是相机 api 的工作运行时权限

     private static final int PERMISSIONS_REQUEST_CAPTURE_IMAGE = 1;
     if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.CAMERA)
                != PackageManager.PERMISSION_GRANTED) {
            // User may have declined earlier, ask Android if we should show him a reason
    
            if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
                // show an explanation to the user
                // Good practise: don't block thread after the user sees the explanation, try again to request the permission.
            } else {
                // request the permission.
                // CALLBACK_NUMBER is a integer constants
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, PERMISSIONS_REQUEST_CAPTURE_IMAGE);
                // The callback method gets the result of the request.
            }
        } else {
    
    
        }
    @Override
        public void onRequestPermissionsResult ( int requestCode, String[] permissions,
        int[] grantResults){
            switch (requestCode) {
                case PERMISSIONS_REQUEST_CAPTURE_IMAGE: {
                    if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        // permission was granted 
    
                        Log.d("", "permission granted success");
    
    
                    } else {
                        // permission denied
    
                        Log.d("", "permission denied");
                    }
                    return;
                }
            }
        }
    

    【讨论】:

    • 我的代码和你的代码类似,但这不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 2016-03-25
    相关资源
    最近更新 更多