我遇到了 Surfaceview 和运行时支持这个问题,
我要求在主要活动中使用 Surfaceview 显示相机预览,所以当我调用代码来显示相机预览时,我要求运行时权限。
但是我在为相机授予权限后立即初始化Surfaceview,此时 surfaceCreated()回调从不调用,并且还授予了权限(我已从设置中检查过)。 / p>
一旦我杀了应用程序并再次打开它之后就完美了。
这是我的初始化代码,
主要活动 中的
@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);
}
}
我无法分享很多代码,抱歉。 所以我刚刚添加了初始化代码。 有没有人面对这个问题或任何人知道任何解决方案?
请帮忙 谢谢你。
答案 0 :(得分:3)
尝试将SurfaceView的可见性初始设置为INVISIBLE,并在授予权限后将其设置为VISIBLE。这样,绘图表面将在权限结果之后创建。希望这可以帮助。