所以我使用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方法中的Camera Device始终为null。我不知道为什么会这样。有什么想法吗?
答案 0 :(得分: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 事实证明那个人已经用方法尝试过了:
然后我将代码运行到我的Nexus 5X Android 6,它运行得非常好。它有摄像头预览,它首先会询问权限,它可以将图片保存到存储器等。
答案 1 :(得分:0)
如果要将camera2api
代码集成到项目中,请在清单中添加hardwareAccelerated=true
并添加该活动。会的。就我而言,它正在工作。
<Application
android:hardwareAccelerated="true"