在不继承 Activity 和覆盖 onRequestPermissionsResult 方法的情况下处理权限请求结果

Handle Permissions Request Result Without Subclassing Activity and Overriding onRequestPermissionsResult Method

我正在从 Cordova 插件中的非 Activity 基于 class 调用权限请求,我的应用程序的主要 activity 无法扩展,所以我不能 implement/overrideonRequestPermissionsResult方法activity。在用户获得授权权限后,我需要 运行 一个事件,例如下面评论的伪代码 lambda,但我不确定如何。我尝试创建自己的 Activity subclass 并实施此方法,但我得到了 NullPointerException.

class MyPlugin extends CordovaPlugin {

    private void saveAndOpenFile() {
        int permission = 
            ActivityCompat.checkSelfPermission(
                cordova.getActivity(), 
                Manifest.permission.WRITE_EXTERNAL_STORAGE);
        if (permission != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(
                cordova.getActivity(),
                PERMISSIONS_STORAGE,
                REQUEST_EXTERNAL_STORAGE
            ); /*.then((int requestCode, String[] permissions, int[] grantedResults) -> {
                // Do something crazy
            });*/
        }
    }

}

我建议在这方面遵循 documentation

简而言之,您似乎应该使用 cordova.hasPermission 检查我们是否有权限,然后使用 cordova.requestPermission,这将调用 activity 并导致出现提示, 请求许可。一旦用户获得许可,结果必须使用 onRequestPermissionResult 方法处理,每个插件都应覆盖该方法。”所以,听起来 CordovaPlugin 提供了一个空的 onRequestPermissionResult 基础实现,你的插件应该覆盖它。

当然,我想您可以调用 ActivityCompat.checkSelfPermissionAcitivity.requestPermissions,但无论哪种方式,您的插件都应该覆盖 onRequestPermissionResult.

class MyPlugin extends CordovaPlugin {

    private void saveAndOpenFile() {
        /* check permissions
                  ...       
                           */
    }
    
    @Override
    public void onRequestPermissionResult(int requestCode, String[] permissions,
                                          int[] grantResults) throws JSONException {
        /* check permission granted and proceed accordingly */
    }

}