我当前正在尝试激活手机的摄像头,并且在激活之前,我正在检查摄像头的权限以查看是否被允许。但是,由于某种原因,当检查权限时,我将得到如下所示的错误:
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);
}
有人能解决这个问题吗?
我花了无数的时间进行此工作并在线搜索解决方案,但它似乎仍然无法正常工作。
感谢您的帮助。
答案 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
}
}
}