0

所以我正在使用 camera2 api,当我打开相机时:

          private void StartUpCam() 
      {
          CameraManager CM = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
          if(camId.compareTo("")!=0)
          {
              //Log.e("camera", "started");
              try{
                  Log.e("Start up Cam and camId:", camId);
                  CM.openCamera(camId, CDcallback, null);
              }
              catch(CameraAccessException e)
              {
                  Log.e("come with me", "if you want to live");
                  e.printStackTrace();
              }
          }
      }

正如你所看到的,我确保打开相机所需的参数全部检查出来并且它们确实如此。无论如何,当回调被击中时:

           private CameraDevice CD;
      private CameraDevice.StateCallback CDcallback
        = new CameraDevice.StateCallback() {

            @Override
            public void onOpened(CameraDevice camera) {
                //Log.e("onOpened", "here");
                CD = camera;
                if(CD == null)
                    Log.e("onOpened", "CD is null");
                createCamPreviewSession();
            }

            @Override
            public void onError(CameraDevice camera, int error) {
                camera.close();
                CD = null;
            }

            @Override
            public void onDisconnected(CameraDevice camera) {
                camera.close();
                CD = null;
            }
        };

onOpened 方法中的相机设备始终为空。我不知道为什么会这样。有任何想法吗?

4

2 回答 2

1

您是否尝试过来自 github 的 camera2basic?

https://github.com/googlesamples/android-Camera2Basic

我试图从那里和android开发人员android.hardware.camera2参考研究camera2。但这太令人困惑了。我正在使用 android studio 2、gradle 2.8 和 nexus lg 5x android 6。

我将源代码复制到我的项目中,在 IDE 上检查所有错误,没有发现错误。在我的 nexus 上尝试后,我总是在调用 CameraDevice 类的每一行上得到相同的错误。它说那个类的空指针。

然后,我在这里发现了这个问题Android Camera2 Sample 事实证明,问的人已经用这个方法试过了:

  1. 文件 > 新建 > 导入样本..
  2. 选择 Camera2Basic 示例。
  3. 将您的 gradle 更新到 2.10 版如何?
  4. 文件 > 项目结构... > 在左侧选项卡上单击项目 > gradle
  5. 将 Gradle 版本更改为 2.10

然后我将代码运行到我的 Nexus 5X And​​roid 6 上,它运行得非常好。它有相机预览,它会首先询问权限,它可以将图片保存到存储等。

于 2016-07-11T10:48:55.037 回答
0

如果您要将camera2api代码集成到您的项目中,请hardwareAccelerated=true在您的清单中添加该活动。它会起作用的。就我而言,它正在工作。

<Application
    android:hardwareAccelerated="true"
于 2020-09-12T15:07:16.863 回答