我正在使用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)
答案 0 :(得分:0)
注意:如果应用针对API级别23或更高级别,则应用用户必须 通过权限明确授予应用程序此权限 管理界面。
请参阅this SO question。
Android Plugin Development Guide
这是您要找的方法吗?: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);
...