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

调用相机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#的问题:使用ATL02数据解算光子脚点的坐标(操作系统-windows)
  • ¥115 关于#python#的问题:未加密前两个软件都可以打开,加密后只有A软件可打开,B软件可以打开但读取不了数据
  • ¥15 在matlab中Application Compiler后的软件无法打开
  • ¥15 想问一下STM32创建工程模板时遇到得问题
  • ¥15 Fiddler抓包443
  • ¥20 Qt Quick Android 项目报错及显示问题
  • ¥15 而且都没有 OpenCVConfig.cmake文件我是不是需要安装opencv,如何解决?
  • ¥15 oracleBIEE analytics
  • ¥15 H.264选择性加密例程
  • ¥50 windows的SFTP服务器如何能批量同步用户信息?