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

调用相机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 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题