[jira] [Commented] (CB-13026) java.lang.NoSuchMethodError: No virtual method requestPermissions([Ljava/lang/String;I)V in class Landroid/app/Activity

2017-09-11 Thread Joe Bowser (JIRA)

[ 
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/andr

[jira] [Commented] (CB-13026) java.lang.NoSuchMethodError: No virtual method requestPermissions([Ljava/lang/String;I)V in class Landroid/app/Activity

2017-07-27 Thread Filip Maj (JIRA)

[ 
https://issues.apache.org/jira/browse/CB-13026?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16103988#comment-16103988
 ] 

Filip Maj commented on CB-13026:


Linking this up to CB-12730, as we are looking at integrating 
cordova-plugin-compat into cordova-android anyways. It looks like there may be 
some additional work to consolidate the way plugins request permissions in 
cordova-android.

> 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.VER

[jira] [Commented] (CB-13026) java.lang.NoSuchMethodError: No virtual method requestPermissions([Ljava/lang/String;I)V in class Landroid/app/Activity

2017-07-24 Thread jcesarmobile (JIRA)

[ 
https://issues.apache.org/jira/browse/CB-13026?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16098509#comment-16098509
 ] 

jcesarmobile commented on CB-13026:
---

I'm not saying it can't be done or shouldn't be done, but right now using 
cordova-plugin-compat the plugins work with previous cordova-android versions, 
not everybody can/want to update.

We could update cordova-android to use ContextCompat and some day get rid of 
the cordova-plugin-compat.

Would you mind creating a new issue for it as "Improvement" or "Feature request"


> 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.Str

[jira] [Commented] (CB-13026) java.lang.NoSuchMethodError: No virtual method requestPermissions([Ljava/lang/String;I)V in class Landroid/app/Activity

2017-07-24 Thread Alex B. (JIRA)

[ 
https://issues.apache.org/jira/browse/CB-13026?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16098113#comment-16098113
 ] 

Alex B. commented on CB-13026:
--

Agree with you, but why 
`org.apache.cordova.CordovaInterfaceImpl.requestPermissions` cannot use 
`ContextCompat` ? Is there any disadvantage of such approach?

> 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#64

[jira] [Commented] (CB-13026) java.lang.NoSuchMethodError: No virtual method requestPermissions([Ljava/lang/String;I)V in class Landroid/app/Activity

2017-07-23 Thread jcesarmobile (JIRA)

[ 
https://issues.apache.org/jira/browse/CB-13026?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16097678#comment-16097678
 ] 

jcesarmobile commented on CB-13026:
---

I think a best solution should be to use Support Library's ContextCompat to 
check for the permissions.
https://developer.android.com/training/permissions/requesting.html

Anyway, all core plugins use cordova-plugin-compat for requesting permissions 
which handles the NoSuchMethodException, so we maybe should change 
documentation to tell users to use that plugin and the code 
PermissionHelper.requestPermissions instead of cordova.requestPermissions

> 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.andr