有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java处理权限请求结果,而不对子类化活动和重写onRequestPermissionsResult方法

我正在从Cordova插件中基于非Activity的类调用权限请求,并且我的应用程序的主要活动无法扩展,因此我无法实现/覆盖活动的onRequestPermissionsResult方法。我需要在用户拥有授权权限后运行一个事件,如下面注释的伪代码lambda,但我不确定如何运行。我尝试过创建自己的Activity子类并实现这个方法,但我得到了一个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
            });*/
        }
    }

}

共 (1) 个答案

  1. # 1 楼答案

    我建议在这个问题上遵循documentation

    简而言之,您应该使用cordova.hasPermission检查我们是否拥有权限,然后使用cordova.requestPermission,它“将调用活动并导致出现提示,请求权限。一旦用户拥有权限,结果必须使用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 */
        }
    
    }