LittleMonsterr 2017-03-27 05:29 采纳率: 100%
浏览 21034
已采纳

调用相机camera.open失败Fail to connect to camera service

权限有了

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.FLASHLIGHT" />
    <!-- 调用硬件相机权限 -->
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
         @Override
    public void surfaceCreated(SurfaceHolder holder) {
        if (!hasSurface) {
            hasSurface = true;
            initCamera(holder);
        }

    }

         @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        hasSurface = false;
        if (camera != null) {
            if (CameraManager.get().isPreviewing()) {
                if (!CameraManager.get().isUseOneShotPreviewCallback()) {
                    camera.setPreviewCallback(null);
                }
                camera.stopPreview();
                camera.release();
                camera = null;
                CameraManager.get().getPreviewCallback().setHandler(null, 0);
                CameraManager.get().getAutoFocusCallback().setHandler(null, 0);
                CameraManager.get().setPreviewing(false);
            }
        }
    }

         private void initCamera(SurfaceHolder surfaceHolder) {
        try {
            //6.0+调用相机权限
            if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions((Activity) getContext(),
                        new String[]{Manifest.permission.CAMERA},
                        TAKE_PHOTO_REQUEST_CODE);
            }else {
                camera = Camera.open();
                parameter = camera.getParameters();
                CameraManager.get().openDriver(surfaceHolder);
                camera = CameraManager.get().getCamera();
                camera.startPreview();
            }

        } catch (IOException | RuntimeException e) {
            L.e(e.getMessage());
            return;
        }
        if (handler == null) {
            handler = new CaptureActivityHandler(this, decodeFormats, characterSet, viewfinderView);
        }
    }

请问少了什么,为什么会失败?
在6.0上测试没问题,换了红米2A 4.4的系统就不行了。
求解
谢谢~

  • 写回答

2条回答 默认 最新

  • LittleMonsterr 2017-03-28 02:55
    关注

    已解决,参考 http://blog.csdn.net/jdsjlzx/article/details/43098179


    @Override
    public void onPause() {
    super.onPause();
    if (handler != null) {
    handler.quitSynchronously();
    handler = null;
    }
    // 关闭摄像头
    CameraManager.get().closeDriver();
    //添加以下代码,问题解决。
    ** if (!hasSurface) {
    SurfaceView surfaceView = (SurfaceView) view.findViewById(R.id.preview_view);
    SurfaceHolder surfaceHolder = surfaceView.getHolder();
    surfaceHolder.removeCallback(this);
    }**
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100