@@ -455,6 +455,73 @@ public static void stop_service() {
455
455
public static native void nativeSetenv (String name , String value );
456
456
public static native int nativeInit (Object arguments );
457
457
458
+
459
+ /**
460
+ * Used by android.permissions p4a module to register a call back after
461
+ * requesting runtime permissions
462
+ **/
463
+ public interface PermissionsCallback {
464
+ void onRequestPermissionsResult (int requestCode , String [] permissions , int [] grantResults );
465
+ }
466
+
467
+ private PermissionsCallback permissionCallback ;
468
+ private boolean havePermissionsCallback = false ;
469
+
470
+ public void addPermissionsCallback (PermissionsCallback callback ) {
471
+ permissionCallback = callback ;
472
+ havePermissionsCallback = true ;
473
+ Log .v (TAG , "addPermissionsCallback(): Added callback for onRequestPermissionsResult" );
474
+ }
475
+
476
+ @ Override
477
+ public void onRequestPermissionsResult (int requestCode , String [] permissions , int [] grantResults ) {
478
+ Log .v (TAG , "onRequestPermissionsResult()" );
479
+ if (havePermissionsCallback ) {
480
+ Log .v (TAG , "onRequestPermissionsResult passed to callback" );
481
+ permissionCallback .onRequestPermissionsResult (requestCode , permissions , grantResults );
482
+ }
483
+ super .onRequestPermissionsResult (requestCode , permissions , grantResults );
484
+ }
485
+
486
+ /**
487
+ * Used by android.permissions p4a module to check a permission
488
+ **/
489
+ public boolean checkCurrentPermission (String permission ) {
490
+ if (android .os .Build .VERSION .SDK_INT < 23 )
491
+ return true ;
492
+
493
+ try {
494
+ java .lang .reflect .Method methodCheckPermission =
495
+ Activity .class .getMethod ("checkSelfPermission" , String .class );
496
+ Object resultObj = methodCheckPermission .invoke (this , permission );
497
+ int result = Integer .parseInt (resultObj .toString ());
498
+ if (result == PackageManager .PERMISSION_GRANTED )
499
+ return true ;
500
+ } catch (IllegalAccessException | NoSuchMethodException |
501
+ InvocationTargetException e ) {
502
+ }
503
+ return false ;
504
+ }
505
+
506
+ /**
507
+ * Used by android.permissions p4a module to request runtime permissions
508
+ **/
509
+ public void requestPermissionsWithRequestCode (String [] permissions , int requestCode ) {
510
+ if (android .os .Build .VERSION .SDK_INT < 23 )
511
+ return ;
512
+ try {
513
+ java .lang .reflect .Method methodRequestPermission =
514
+ Activity .class .getMethod ("requestPermissions" ,
515
+ String [].class , int .class );
516
+ methodRequestPermission .invoke (this , permissions , requestCode );
517
+ } catch (IllegalAccessException | NoSuchMethodException |
518
+ InvocationTargetException e ) {
519
+ }
520
+ }
521
+
522
+ public void requestPermissions (String [] permissions ) {
523
+ requestPermissionsWithRequestCode (permissions , 1 );
524
+ }
458
525
}
459
526
460
527
0 commit comments