在要求运行时权限

时间:2017-06-21 10:49:01

标签: android surfaceview runtime-permissions

我遇到了 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);
    }
}

我无法分享很多代码,抱歉。 所以我刚刚添加了初始化代码。 有没有人面对这个问题或任何人知道任何解决方案?

请帮忙 谢谢你。

1 个答案:

答案 0 :(得分:3)

尝试将SurfaceView的可见性初始设置为INVISIBLE,并在授予权限后将其设置为VISIBLE。这样,绘图表面将在权限结果之后创建。希望这可以帮助。