[RK3288][Android6.0] 调试笔记 --- 打开Camera提示setPreviewDisplay时Exception

Platform: RK3288
OS: Android 6.0
Kernel: 3.10.92

背景:

自己写了个Camera Preview程序做验证,出现了exception,log如下:

01-03 13:46:08.801  2334  2334 E AndroidRuntime: FATAL EXCEPTION: main
01-03 13:46:08.801  2334  2334 E AndroidRuntime: Process: com.example.camerapreviewtest, PID: 2334
01-03 13:46:08.801  2334  2334 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.hardware.Camera.setPreviewDisplay(android.view.SurfaceHolder)' on a null object reference
01-03 13:46:08.801  2334  2334 E AndroidRuntime:    at com.example.camerapreviewtest.MainActivity$CameraPreview.surfaceCreated(MainActivity.java:65)
01-03 13:46:08.801  2334  2334 E AndroidRuntime:    at android.view.SurfaceView.updateWindow(SurfaceView.java:583)
01-03 13:46:08.801  2334  2334 E AndroidRuntime:    at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:177)
01-03 13:46:08.801  2334  2334 E AndroidRuntime:    at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944)
01-03 13:46:08.801  2334  2334 E AndroidRuntime:    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2055)
01-03 13:46:08.801  2334  2334 E AndroidRuntime:    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
01-03 13:46:08.801  2334  2334 E AndroidRuntime:    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
01-03 13:46:08.801  2334  2334 E AndroidRuntime:    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
01-03 13:46:08.801  2334  2334 E AndroidRuntime:    at android.view.Choreographer.doCallbacks(Choreographer.java:670)
01-03 13:46:08.801  2334  2334 E AndroidRuntime:    at android.view.Choreographer.doFrame(Choreographer.java:606)
01-03 13:46:08.801  2334  2334 E AndroidRuntime:    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
01-03 13:46:08.801  2334  2334 E AndroidRuntime:    at android.os.Handler.handleCallback(Handler.java:743)
01-03 13:46:08.801  2334  2334 E AndroidRuntime:    at android.os.Handler.dispatchMessage(Handler.java:95)
01-03 13:46:08.801  2334  2334 E AndroidRuntime:    at android.os.Looper.loop(Looper.java:148)
01-03 13:46:08.801  2334  2334 E AndroidRuntime:    at android.app.ActivityThread.main(ActivityThread.java:5456)
01-03 13:46:08.801  2334  2334 E AndroidRuntime:    at java.lang.reflect.Method.invoke(Native Method)
01-03 13:46:08.801  2334  2334 E AndroidRuntime:    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:772)
01-03 13:46:08.801  2334  2334 E AndroidRuntime:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:662)

对应代码:

public void surfaceCreated(SurfaceHolder holder){
    try {
        mCamera.setPreviewDisplay(holder);
        mCamera.startPreview();
    }catch (IOException e){

    }
}

原因:

1.机器上只有一颗Camera,并且注册的是Front,camera默认打开的是back camera.

public static Camera open() {
    int numberOfCameras = getNumberOfCameras();
    CameraInfo cameraInfo = new CameraInfo();
    for (int i = 0; i < numberOfCameras; i++) {
        getCameraInfo(i, cameraInfo);
        if (cameraInfo.facing == CameraInfo.CAMERA_FACING_BACK) {
            return new Camera(i);
        }
    }
    return null;
}

2.AndroidManifest.xml 中Camera权限没打开

<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera"/>

3. 运行时权限没打开,路径在 Settings -> Apps -> [App Name] -> Permissions

这里写图片描述

参考:

An error occurred while connecting to camera: 0 — Fail to connect to camera service

猜你喜欢

转载自blog.csdn.net/kris_fei/article/details/80526429
今日推荐