Проверка разрешений камеры возвращает нулевую ссылку на объект - PullRequest
1 голос
/ 29 января 2020

В настоящее время я пытаюсь активировать камеру телефона, и перед активацией я проверяю разрешения камеры, чтобы узнать, разрешено ли это. Однако по какой-то причине при проверке разрешений я получу сообщение об ошибке, как показано ниже:

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 Ответ

1 голос
/ 29 января 2020

Вы можете проверить вот так -

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
        }
    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...