【问题标题】:Cordova request permission throwing exceptionCordova 请求权限抛出异常
【发布时间】:2018-01-31 09:31:42
【问题描述】:

我正在使用 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)

【问题讨论】:

    标签: android cordova ionic-framework mobile


    【解决方案1】:

    一些上下文

    注意:如果应用以 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 {
    
    }
    

    可以找到启用 Cordova 应用以支持 Android SDK 版本 23 权限 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

    【讨论】:

      猜你喜欢
      • 2021-09-03
      • 1970-01-01
      • 2018-06-27
      • 2021-11-25
      • 1970-01-01
      • 2016-05-27
      • 2017-06-13
      • 2018-09-05
      • 1970-01-01
      相关资源
      最近更新 更多