请求运行时权限后,Surfaceview 未立即创建
Surfaceview is not creating immidiately after asking for runtime permission
我被这个 Surfaceview 和 runtime perssion,
的问题困住了
我需要在主 Surfaceview 显示相机预览 activity,所以我在调用代码显示时请求运行时权限相机预览。
但是我在为相机授予权限后立即初始化 Surfaceview,那时 surfaceCreated() 回调永远不会调用并且权限也被授予(我已经检查过设置)。
一旦我终止应用程序并再次打开,它就可以完美运行了。
这是我的初始化代码,
在MainActivity中,
@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();
}
我在 class 上创建了 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 的可见性最初设置为 INVISIBLE,并在授予权限后将其设置为 VISIBLE。这样,在许可结果之后创建绘图表面。希望这可以帮助。
我被这个 Surfaceview 和 runtime perssion,
的问题困住了我需要在主 Surfaceview 显示相机预览 activity,所以我在调用代码显示时请求运行时权限相机预览。
但是我在为相机授予权限后立即初始化 Surfaceview,那时 surfaceCreated() 回调永远不会调用并且权限也被授予(我已经检查过设置)。
一旦我终止应用程序并再次打开,它就可以完美运行了。
这是我的初始化代码,
在MainActivity中,
@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();
}
我在 class 上创建了 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 的可见性最初设置为 INVISIBLE,并在授予权限后将其设置为 VISIBLE。这样,在许可结果之后创建绘图表面。希望这可以帮助。