【发布时间】:2014-05-09 13:41:16
【问题描述】:
我尝试打开前置摄像头,但 Camera.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)以及使用功能(camera 和 camera.front)
相机已正确关闭(stop()、reset()、stopPreview()、release())
在单独的应用程序中实现服务。这可行,但因为我希望它与活动“分离”,所以我无法进入活动并从那里启动相机。我希望它从我的 Recorder.java 开始,它应该很容易实现到您的应用程序中以进行用户测试...
我怀疑可能是 SurfaceHolder 阻碍了我。是否可以在不处理Activity中的SurfaceViews和SurfaceHolders的情况下进行摄像头记录?
感谢您的帮助
更多代码(这是异常的来源):
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;
}
【问题讨论】: