检查相机权限会返回空对象引用

时间:2020-01-29 06:15:01

标签: java android android-camera

我当前正在尝试激活手机的摄像头,并且在激活之前,我正在检查摄像头的权限以查看是否被允许。但是,由于某种原因,当检查权限时,我将得到如下所示的错误:

Attempt to invoke virtual method 'int android.content.Context.checkPermission(java.lang.String, int, 
int)' on a null object reference

我尝试添加到清单中

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

仍然似乎不起作用。

我也将appcompat级别提高到23.1.1,它也不起作用。

我的程序的代码段显示如下:

public abstract class CameraFragment extends Fragment implements CameraCallbacks {

   private CameraPreview mCameraPreview;

   public void startCamera(CameraConfig cameraConfig) {
          if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA)
            != PackageManager.PERMISSION_GRANTED) { //check if the camera permission is available

          }else{ (mCameraPreview == null) mCameraPreview = addPreView();
            mCameraPreview.startCameraInternal(cameraConfig);
 }}}

下面是CameraPreview的代码段:

class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
   private CameraCallbacks mHiddenCameraActivity;
   CameraPreview(@NonNull Context context, CameraCallbacks cameraCallbacks) {
      super(context);

      mHiddenCameraActivity = cameraCallbacks;

      //Set surface holder
      mHolder = getHolder();
      mHolder.addCallback(this);
      mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
 }

以下是CameraCallback的代码段:

interface CameraCallbacks {

   void onImageCapture(@NonNull File imageFile);

   void onCameraError(@CameraError.CameraErrorCodes int errorCode);
}

有人能解决这个问题吗?

我花了无数的时间进行此工作并在线搜索解决方案,但它似乎仍然无法正常工作。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以这样检查-

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
  {
      if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission. CAMERA) == PackageManager.PERMISSION_GRANTED) {
      //  you can access camera   
      } 
      else
      {
         ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission. CAMERA}, 411);
      }
  }
  else
  {
    //  you can access camera          
  }

获取“权限”对话框的结果,

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == 411) {
        if (grantResults.length == 0 || grantResults == null) {
             // show dialog that you need access to go ahead
        } else if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // Your code here permission granted
        } else if (grantResults[0] == PackageManager.PERMISSION_DENIED) {
             // show dialog that you need access to go ahead
        }
    }
}