【问题标题】:How to use onRequestPermissionsResult to handle permissions in React Native Android module?如何使用 onRequestPermissionsResult 处理 React Native Android 模块中的权限?
【发布时间】:2020-06-03 13:54:35
【问题描述】:

我想在原生 Android 模块中使用 onRequestPermissionsResult,它可以导入到 React Native 项目中。

权限处理需要在模块中进行 - 所以PermissionsAndroid 或更改项目 MainActivity 将不起作用。对于类似的onActivityResult,有一种方法可以将create and add a listener 连接到 ReactApplicationContext。

有没有办法为onRequestPermissionsResult 做到这一点?

编辑:添加本机模块代码以显示我正在尝试做的事情:

public class NativeModule extends ReactContextBaseJavaModule {
    public NativeModule(ReactApplicationContext reactContext) {
        super(reactContext);
        ...
    }

    @ReactMethod
    public void requestPermissions() {
        getCurrentActivity().requestPermissions(...)
    }

    // is it possible to hook into the requestPermissions callback with the result from within the module? 
    // public boolean onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { }

    ...
}

【问题讨论】:

  • 上传您的代码以便检查

标签: react-native react-native-android android-permissions


【解决方案1】:

没有很好的记录,但是你可以。

  1. 更新您的 NativeModule 以同时实现 PermissionListener 并覆盖 onRequestPermissionsResult() 方法。
  2. 将当前活动转换为PermissionAwareActivity 并调用其requestPermissions() 方法,将this 作为listener 参数传递。

这是一个例子:

public class NativeModule extends ReactContextBaseJavaModule implements PermissionListener {

    @ReactMethod
    public void requestPermissions() {
        PermissionAwareActivity activity = (PermissionAwareActivity) getCurrentActivity();
        if (activity == null) {
            // Handle null case
        }

        activity.requestPermissions(..., this);
    }

    @Override
    public boolean onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        // Handle result
        return true;
    }
}

【讨论】:

    猜你喜欢
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 2020-06-05
    • 2019-11-05
    • 2021-05-26
    • 1970-01-01
    相关资源
    最近更新 更多