如何使用 onRequestPermissionsResult 处理 React Native Android 模块中的权限?

Posted

技术标签:

【中文标题】如何使用 onRequestPermissionsResult 处理 React Native Android 模块中的权限?【英文标题】:How to use onRequestPermissionsResult to handle permissions in React Native Android module? 【发布时间】: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)  

    ...

【问题讨论】:

上传您的代码以便检查 【参考方案1】:

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

    更新您的 NativeModule 以同时实现 PermissionListener 并覆盖 onRequestPermissionsResult() 方法。 将当前活动转换为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;
    

【讨论】:

以上是关于如何使用 onRequestPermissionsResult 处理 React Native Android 模块中的权限?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?

WSARecv 如何使用 lpOverlapped?如何手动发出事件信号?