如何在Fragment中为相机授予权限

时间:2019-07-06 13:20:29

标签: java android

您好,我有一个使用相机的简单应用程序,因此用户必须授予相机权限。

到目前为止,我的应用只有Activity,但现在我想使用Fragments。 我弄碎了一个叫做FragmentScanCode的片段(这里我想使用相机)。

这也是第一个片段,因此我想在应用程序启动时授予权限。

MainActivity中有我的代码,它工作正常。

final int RequestCameraPermissionID = 1001;

onRequestPermissionsResult

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case RequestCameraPermissionID: {
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
                        ActivityCompat.requestPermissions(MainActivity.this,
                                new String[]{Manifest.permission.CAMERA},
                                RequestCameraPermissionID);

                        //return;
                    }
                    try {
                        cameraSource.start(cameraView.getHolder());
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                }
            }
            break;
        }
    }

由于Fragment,我无法在ActivityCompat中使用它。

是否有可能授予片段权限的解决方案?

这是我根据developer.google.com文档尝试过的方法,并且有效

这是我的有效代码。

@Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions,
                                           int[] grantResults) {
        switch (requestCode){
            case RequestCameraPermissionID: {
                if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
                    if(getActivity().checkSelfPermission(Manifest.permission.CAMERA) !=
                    PackageManager.PERMISSION_GRANTED) {
                        requestPermissions(
                                new String[]{Manifest.permission.CAMERA},
                                RequestCameraPermissionID);
                        //cameraSource.start(cameraView.getHolder());
                        return;
                    }
                }
                captureCode();
            }
            break;
        }
    }

以及我的函数captureCode()

try {
                        if (getActivity().checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {

                            requestPermissions(
                                    new String[]{Manifest.permission.CAMERA},
                                    RequestCameraPermissionID);
                            return;
                        }
                        cameraSource.start(cameraView.getHolder());

                    } catch (IOException e) {
                        e.printStackTrace();
                    }

1 个答案:

答案 0 :(得分:0)

此行为似乎出现在Fragment的v4 Fragment支持类requestPermissions中。对于希望使用本机类以及API级别在11到23之间的扩展功能的用户,存在Activity / FragmentCompat实现。check this out