我试图打开前置摄像头,但摄像头。open(camId)返回null并抛出异常java.lang.RuntimeException: Fail to connect to camera service
。
我已经环顾四周类似的问题,并尝试了我在这些线程中发现的东西,但它似乎不适合我的程序。我想这可能与我试图将相机作为一种服务来运行有关,我不想要任何预览。
这是我的开始记录方法:
Log.v(TAG, "Starting camera");
Intent intent = new Intent(getActivity(), RecorderService.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getActivity().startService(intent);
这是我的停止方法:
Log.v(TAG, "Stopping camera");
getActivity().stopService(new Intent(getActivity(), RecorderService.class));
在服务的onStartCommand方法中,我根据Android文档设置所有设置。我已经使这个确切的代码工作在一个应用程序,但当我试图"分离"它通过实现它在我的Recorder.java类,我似乎真的不能围绕的情况下,我没有从一个活动打开它的工作…
我试过了:
Android Manifest中的权限(camera, record_audio, record_video)和uses-feature (camera和camera.front)
相机正确关闭(stop(), reset(), stopPreview(), release())
在单独的应用程序中实现该服务。这是可行的,但因为我想让它与活动"分离",所以我不能进入活动并从那里启动相机。我更愿意从我的Recorder.java开始,它应该很容易实现到您的应用程序中进行用户测试…
我怀疑这可能是SurfaceHolder阻碍了我。是否有可能在不处理活动中的SurfaceViews和surfaceholder的情况下使相机记录?
谢谢你的帮助
更多代码(这就是异常的来源):
private static Camera openFrontFacingCamera() {
int cameraCount = 0;
Camera cam = null;
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
cameraCount = Camera.getNumberOfCameras();
Log.v(TAG, "Number of cameras: " + cameraCount);
for ( int camIdx = 0; camIdx < cameraCount; camIdx++ ) {
Camera.getCameraInfo( camIdx, cameraInfo );
if ( cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT ) {
try {
cam = Camera.open( camIdx );
} catch (Exception e){
// Camera is not available (in use or does not exist)
Log.d(TAG, "Camera did not open");
Log.d(TAG, e.toString());
e.printStackTrace();
}
}
}
return cam;
}
在你的日志
Log.d(TAG, "Camera did not open");
改为
Log.d(TAG, "Camera did not open, camId= "+camIdx);
我想你会知道答案的。是否会抛出camIdx = 0的异常?
如果没有,那么我认为你的问题是你没有停止相机服务之前开始camIdx= 1