我一直纠结于surfaceview和runtime透视的问题,
我要求在主活动中使用surfaceview显示相机预览,因此我在调用代码显示相机预览时请求运行时权限。
但是,在授予相机权限后,我会立即初始化surfaceview,此时surfacecreated()回调永远不会调用,权限也会被授予(我已经从设置中检查过)。
一旦我关闭了这个应用程序并再次打开它,它就会完美地运行。
这是我的初始化代码,
在主要活动中,
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
initCameraPreview();
}
在initCamerapReview()方法中,
public void initCameraPreview(){
StartCameraPreview preview = new StartCameraPreview(context, surfaceView);
preview.onCreate();
}
我为SurfaceView在课堂上创建了,
startcamerapreview.java
public StartCameraPreview(Context context, SurfaceView surfaceView) {
this.mContext = context;
this.surfaceView = surfaceView;
}
public void onCreate() {
if (checkCameraHardware()) {
mCamera = getCameraInstance();
// configure preview
previewHolder = surfaceView.getHolder();
previewHolder.addCallback(surfaceCallback);
previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
}
对不起,我不能分享太多密码。
所以我刚刚添加了初始化代码。
有没有人面临这个问题,或者有人知道解决这个问题的办法?
请帮助
谢谢你的建议。
最佳答案
尝试将surfaceview的可见性最初设置为不可见,并在授予权限后将其设置为可见。这样,在权限结果之后创建绘图曲面。希望这有帮助。