打开相机返回null (RuntimeException: Fail to connect to camera serv



我试图打开前置摄像头,但摄像头。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类,我似乎真的不能围绕的情况下,我没有从一个活动打开它的工作…

我试过了:

  1. Android Manifest中的权限(camera, record_audio, record_video)和uses-feature (camera和camera.front)

  2. 相机正确关闭(stop(), reset(), stopPreview(), release())

  3. 在单独的应用程序中实现该服务。这是可行的,但因为我想让它与活动"分离",所以我不能进入活动并从那里启动相机。我更愿意从我的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

最新更新