首页 > 解决方案 > 在“androidx.fragment.app.Fragment”中请求权限和onRequestPermissionResult

问题描述

我是android的初学者,希望有任何帮助。
基本上在androidx.fragment.app.Fragment调用之后requestPermissions()onRequestPermissionsResult()从不调用。

我阅读了另一个问题(如果在片段和活动中都定义了 onRequestPermissionsResult ,则不会在片段中调用),这ActivityCompat.requestPermissions将导致onRequestPermissionsResult调用活动的方法。并且简单requestPermissions会调用onRequestPermissionsResult相同的片段。我已经尝试了两种方法,但是每次调用活动的方法时,我想可能是因为这不是 v4 支持片段,而是androidx.fragment.app.Fragment.

我尝试onRequestPermissionsResult在活动中覆盖并调用 super 的方法,但仍然没有调用片段的方法。

private final String[] REQUIRED_PERMISSIONS = new String[]{"android.permission.CAMERA", "android.permission.WRITE_EXTERNAL_STORAGE"};
private int REQUEST_CODE_PERMISSIONS = 10;

@Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        setupTimeOut();

        if (allPermissionsGranted()) {
            // Do stuff that requires permission
        } else {
            requestPermissions(REQUIRED_PERMISSIONS, REQUEST_CODE_PERMISSIONS);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == REQUEST_CODE_PERMISSIONS) {
            if (allPermissionsGranted()) {
                // Do stuff that requires permission
            } else {
                Toast.makeText(getViewContext(), "Permissions not granted", Toast.LENGTH_SHORT).show();
            }
        }
    }

    private boolean allPermissionsGranted() {
        //check if req permissions have been granted
        for (String permission : REQUIRED_PERMISSIONS) {
            if (ContextCompat.checkSelfPermission(getViewContext(), permission) != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }
        return true;
    }

我想要的是在同一个片段中获得权限结果回调。
如果这是相关的,权限是针对相机和写入外部存储的,片段是一个简单的照片捕捉片段。

标签: androidandroid-fragmentsandroidx

解决方案


推荐阅读