java - 如何在 Fragment 中授予相机权限

标签 java android

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

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

这也是第一个 fragment ,所以我想在应用程序开始时授予权限。

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

是否有任何可能的解决方案来授予 fragment 权限?

这是我根据 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();
                    }

最佳答案

这种行为似乎存在于 Fragment 的 v4 Fragment 支持类 requestPermissions 中。 Activity/FragmentCompat 实现适用于希望在 API 级别 11 到 23 上使用具有扩展功能的 native 类的人。check this out

关于java - 如何在 Fragment 中授予相机权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56914472/

相关文章:

java - 如何使用服务器端java加密sqlite db文件以便flex/air客户端可以读取它?

android - 将项目添加到 Endless Scroll RecyclerView,底部有 ProgressBar

安卓 "attempted to access a cursor after it has been closed"

java - 无法在 android :onClick attribute defined on view class. 的父或祖先上下文中找到方法。 AppCompatTextView

java - Android Java - 为什么不扩展 Activity -> 新 Activity

java - Swing addWindowFocusListener

java - jaxws-maven-plugin、maven-enunciate-plugin 示例?

Java Prepared statement Sql查询错误

android - 最新版本如何使用getdownloadurl?

android - FLAG_ACTIVITY_SINGLE_TOP 不工作