You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cordova.apache.org by "Joe Bowser (JIRA)" <ji...@apache.org> on 2017/09/11 17:31:00 UTC
[jira] [Commented] (CB-13026) java.lang.NoSuchMethodError: No
virtual method requestPermissions([Ljava/lang/String;I)V in class
Landroid/app/Activity
[ https://issues.apache.org/jira/browse/CB-13026?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16161640#comment-16161640 ]
Joe Bowser commented on CB-13026:
---------------------------------
I would greatly prefer to not use ContextCompat in the cordova-android core, partly because this is going to blow up plugins that also use the Android compat. We're integration cordova-plugin-compat back into Cordova-Android.
Adding the Android compatibility library as a dependency on cordova-android itself would add a lot of complexity w.r.t. licence files (even though both are Apache licensed, less dependencies are better).
> java.lang.NoSuchMethodError: No virtual method requestPermissions([Ljava/lang/String;I)V in class Landroid/app/Activity
> -----------------------------------------------------------------------------------------------------------------------
>
> Key: CB-13026
> URL: https://issues.apache.org/jira/browse/CB-13026
> Project: Apache Cordova
> Issue Type: Bug
> Components: cordova-android
> Affects Versions: cordova@7.0.0
> Reporter: Alex B.
> Assignee: Joe Bowser
> Labels: bug
> Fix For: 7.0.0
>
>
> h3. The problem
> Problem reproduced on Android 5.1.1 (API level 22), on all my devices which below API level 23
> Problematic part of code
> {code:java}
> public class HelloWorldBridge extends CordovaPlugin {
> String [] permissions = {
> Manifest.permission.CALL_PHONE,
> Manifest.permission.INSTALL_SHORTCUT };
> private static int REQUEST_CODE_PERMISSION = 0;
> @Override protected void pluginInitialize() {
> onStart();
> }
> @Override public void onStart() {
> cordova.requestPermissions(this, REQUEST_CODE_PERMISSION, permissions);
> }
> @Override public void onNewIntent(Intent intent) {
> cordova.getActivity().setIntent(intent);
> }
> @Override
> public void onRequestPermissionResult(int requestCode, String[] permissions, int[] grantResults) throws JSONException {
> super.onRequestPermissionResult(requestCode, permissions, grantResults);
> if (requestCode == REQUEST_CODE_PERMISSION) {
> for (int r : grantResults) {
> if (r == PackageManager.PERMISSION_DENIED) {
> return;
> }
> }
> cordova.getActivity().runOnUiThread(new Runnable() {
> @Override
> public void run() {
> Log.d(TAG, "Granted!");
> }
> });
> }
> }
> }
> {code}
> Stack trace:
> {code:java}
> java.lang.NoSuchMethodError: No virtual method requestPermissions([Ljava/lang/String;I)V in class Landroid/app/Activity; or its super classes (declaration of 'android.app.Activity' appears in /system/framework/framework.jar)
> at org.apache.cordova.CordovaInterfaceImpl.requestPermissions(CordovaInterfaceImpl.java:226)
> at org.mysample.HelloWorldBridge.initDialOnce(DialOnceBridge.java:40)
> at org.mysample.HelloWorldBridge.pluginInitialize(DialOnceBridge.java:27)
> at org.apache.cordova.CordovaPlugin.privateInitialize(CordovaPlugin.java:58)
> at org.apache.cordova.PluginManager.getPlugin(PluginManager.java:171)
> at org.apache.cordova.PluginManager.startupPlugins(PluginManager.java:97)
> at org.apache.cordova.PluginManager.init(PluginManager.java:86)
> at org.apache.cordova.CordovaWebViewImpl.init(CordovaWebViewImpl.java:115)
> at org.apache.cordova.CordovaActivity.init(CordovaActivity.java:149)
> at org.apache.cordova.CordovaActivity.loadUrl(CordovaActivity.java:224)
> at com.dialonce.cordova.sample.MainActivity.onCreate(MainActivity.java:39)
> at android.app.Activity.performCreate(Activity.java:6092)
> at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1112)
> at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2468)
> at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2595)
> at android.app.ActivityThread.access$800(ActivityThread.java:178)
> at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470)
> at android.os.Handler.dispatchMessage(Handler.java:111)
> at android.os.Looper.loop(Looper.java:194)
> at android.app.ActivityThread.main(ActivityThread.java:5631)
> at java.lang.reflect.Method.invoke(Native Method)
> at java.lang.reflect.Method.invoke(Method.java:372)
> at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:963)
> at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:758)
> {code}
> h3. Investigation
> According docs [Activity.requestPermissions | https://developer.android.com/reference/android/app/Activity.html#requestPermissions(java.lang.String[], int)] this method require Android API 23
> h3. Workaround
> Wrap `requestPermissions` code with `if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { ... }`
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)
---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@cordova.apache.org
For additional commands, e-mail: issues-help@cordova.apache.org