Cordova请求权限抛出异常

时间:2018-01-31 09:31:42

标签: android cordova ionic-framework mobile

我正在使用cordova自定义插件检查权限,因为sdk版本从22迁移到23.我无法找到并覆盖onRequestPermissionResult。

       NoSuchMethodException when delivering permissions results java.lang.NoSuchMethodException: onRequestPermissionResult
    at java.lang.Class.getConstructorOrMethod(Class.java:472)
    at java.lang.Class.getDeclaredMethod(Class.java:640)
    at com.phonegap.plugins.xxxxx.xxxxx.deliverPermissionResult(xxxxx.java:314)
    at com.phonegap.plugins.xxxxx.xxxxx.execute(xxxxx.java:218)
    at org.apache.cordova.CordovaPlugin.execute(CordovaPlugin.java:95)
    at org.apache.cordova.PluginManager.exec(PluginManager.java:131)
    at org.apache.cordova.CordovaBridge.jsExec(CordovaBridge.java:59)

at org.apache.cordova.engine.SystemExposedJsApi.exec(SystemExposedJsApi.java:41)
at com.android.org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
at com.android.org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:27)

at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:149)
at android.os.HandlerThread.run(HandlerThread.java:61)

1 个答案:

答案 0 :(得分:0)

一些上下文

  

注意:如果应用针对API级别23或更高级别,则应用用户必须   通过权限明确授予应用程序此权限   管理界面。

请参阅this SO question

Android Plugin Development Guide

Developing Cordova apps

这是您要找的方法吗?:CordovaPlugin.java

    public void onRequestPermissionResult(int requestCode, String[] permissions,
                                          int[] grantResults) throws JSONException {

}

可以找到支持Android SDK版本23权限的Cordova应用 here

程序

(1)将第三方Cordova插件更新为支持在运行时请求权限的版本。

(2)添加PermissionHelper.java文件。此文件是使用Android SDK版本23权限的任何插件的依赖项。如果 如果您没有依赖权限的任何第三方Cordova插件,则无需添加PermissionHelper.java文件。

(a)创建一个org.apache.cordova包。

(b)从Apache cordova-plugin-compat GitHub存储库下载PermissionHelper.java文件: https://github.com/apache/cordova-plugin-compat/blob/master/src/android/PermissionHelper.java

(c)将PermissionHelper.java文件添加到您在步骤2.a中创建的包目录中。您只需要将PermissionHelper.java文件添加到项目中一次,即使您有多个第三方插件也是如此。

  

此类(PermissionHelper.java)为权限请求和提供反射方法   检查,以便为cordova-android 5.0.0+编写的插件仍然可以   使用早期的cordova-android版本编译。

以下是 PermissionHelper.java的源代码内容:

onRequestPermissionResult() 不是 PermissionHelper.java的方法,从那里调用它。 这是替代cordovaInterface.requestPermission()的辅助方法。

以下是它的调用方式:

    private static void deliverPermissionResult(CordovaPlugin plugin, int requestCode, String[] permissions) {
        // Generate the request results
        int[] requestResults = new int[permissions.length];
        Arrays.fill(requestResults, PackageManager.PERMISSION_GRANTED);

        try {
            Method onRequestPermissionResult = CordovaPlugin.class.getDeclaredMethod(
                    "onRequestPermissionResult", int.class, String[].class, int[].class);

onRequestPermissionResult.invoke(plugin, requestCode, permissions, requestResults);
...

CordovaInterfaceImpl