Android 锁定屏幕上的相机预览

Android 锁定屏幕上的相机预览,android,camera,preview,lockscreen,Android,Camera,Preview,Lockscreen,我想在lockscreen中添加一个拍照功能,我需要在屏幕上打开预览,但总是失败,logcat说错误是关于“setPreviewWindow-Null ANativeWindow传递给setPreviewWindow”和“startPreview-预览未启动。预览进行中标记已设置” 在数字时钟视图后的keyguard_screen_tab_unlock.xml中,将 <FrameLayout android:id="@+id/mPreview" androi

我想在lockscreen中添加一个拍照功能,我需要在屏幕上打开预览,但总是失败,logcat说错误是关于“setPreviewWindow-Null ANativeWindow传递给setPreviewWindow”和“startPreview-预览未启动。预览进行中标记已设置”

在数字时钟视图后的keyguard_screen_tab_unlock.xml中,将

<FrameLayout
        android:id="@+id/mPreview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
SurfacePreview类别:

public class SurfacePreview extends SurfaceView implements SurfaceHolder.Callback {

    private SurfaceHolder mSurfaceHolder;

    SurfacePreview(Context context) {
        super(context);
        mSurfaceHolder = this.getHolder();
        mSurfaceHolder.addCallback(this);
        mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }

    public void surfaceCreated(SurfaceHolder holder) {
        mCamera = Camera.open(CameraInfo.CAMERA_FACING_BACK);
        try {
            mCamera.setPreviewDisplay(holder);
        } catch (IOException e) {
            e.printStackTrace();
        }
        mCamera.startPreview();
    }

    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        Camera.Parameters parameters = mCamera.getParameters();
        mCamera.setParameters(parameters);
        mCamera.setDisplayOrientation(90);
    }

    public void surfaceDestroyed(SurfaceHolder holder) {
        mCamera.release();
    }
}

有人知道如何解决这个问题并在锁屏上启动prview吗?非常感谢。

你得到答案了吗?
public class SurfacePreview extends SurfaceView implements SurfaceHolder.Callback {

    private SurfaceHolder mSurfaceHolder;

    SurfacePreview(Context context) {
        super(context);
        mSurfaceHolder = this.getHolder();
        mSurfaceHolder.addCallback(this);
        mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }

    public void surfaceCreated(SurfaceHolder holder) {
        mCamera = Camera.open(CameraInfo.CAMERA_FACING_BACK);
        try {
            mCamera.setPreviewDisplay(holder);
        } catch (IOException e) {
            e.printStackTrace();
        }
        mCamera.startPreview();
    }

    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        Camera.Parameters parameters = mCamera.getParameters();
        mCamera.setParameters(parameters);
        mCamera.setDisplayOrientation(90);
    }

    public void surfaceDestroyed(SurfaceHolder holder) {
        mCamera.release();
    }
}