2016-12-01 3 views
1

Ich arbeite daran, die Laufzeitberechtigungen für mein Android-Gerät zu geben. In meinem Fall sollte der Benutzer, sobald er auf die Schaltfläche Anrufen klickt, nach 3 Berechtigungen CALL_PHONE, CAMERA und RECORD_AUDIO fragen. Es fragt nach Berechtigungen, die ich im Protokoll sehen kann, aber nur eine der Berechtigungen wird gewährt. Wieder wenn ich meine App kille und auf Call button klicke, wird nun die zweite Erlaubnis gefragt und nxt mal der Lats. Alle 3 werden nicht gleichzeitig gefragt. Wie ich im Protokoll sehen kann, fragt es und erteilt alle Erlaubnis im ersten Mal nur, aber nur eins wird auf einmal gefragt.Alle Berechtigungen nicht in android Marshmallow erhalten

@JavascriptInterface 
    public void askPermission(String permission){ 
     Log.d("Ask permission", permission); 
     switch (permission){ 
     case "audioCall": 
      askForPermission(Manifest.permission.CALL_PHONE,CALL_PHONE); 
      askForPermission(Manifest.permission.CAMERA,CAMERA); 
      askForPermission(Manifest.permission.RECORD_AUDIO,RECORD_AUDIO); 
      break; 
     case "videoCall": 
      askForPermission(Manifest.permission.CALL_PHONE,CALL_PHONE); 
      askForPermission(Manifest.permission.CAMERA,CAMERA); 
      askForPermission(Manifest.permission.RECORD_AUDIO,RECORD_AUDIO); 
      break; 

     case "writeExternalStorage": 
      askForPermission(Manifest.permission.CALL_PHONE,CALL_PHONE); 
      askForPermission(Manifest.permission.CAMERA,CAMERA); 
      askForPermission(Manifest.permission.RECORD_AUDIO,RECORD_AUDIO); 
      break; 

     case "WRITE_EXTERNAL_STORAGE": 
      askForPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE); 
      break; 

     case "GET_ACCOUNTS": 
      askForPermission(Manifest.permission.GET_ACCOUNTS,GET_ACCOUNTS); 
      break; 

     case "READ_CONTACTS": 
      askForPermission(Manifest.permission.READ_CONTACTS,READ_CONTACTS); 
      break; 

     } 
    } 

public void askForPermission(String permission, Integer requestCode){ 
    Log.d("Permissions requested is+", permission); 

    if (ContextCompat.checkSelfPermission(MainActivity.this, permission) != PackageManager.PERMISSION_GRANTED) { 

     // Should we show an explanation? 
     if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, permission)) { 
      Log.d("Permission is already granted", ""+permission); 
      //This is called if user has denied the permission before 
      //In this case I am just asking the permission again 
      ActivityCompat.requestPermissions(MainActivity.this, new String[]{permission}, requestCode); 

     } else { 
      Log.d("asking for permissions", ""+permission); 
      ActivityCompat.requestPermissions(MainActivity.this, new String[]{permission}, requestCode); 
     } 
    } else { 
     /* Toast.makeText(this, "" + permission + " is already granted.", Toast.LENGTH_SHORT).show();*/ 
     Log.d("Permission is already granted", ""+permission); 
    } 
} 

logs.txt

12-01 15:36:54.911: D/Ask permission(20783): videoCall 
12-01 15:36:54.912: D/Permissions requested is+(20783): android.permission.CALL_PHONE 
12-01 15:36:54.912: D/Permission is already granted(20783): android.permission.CALL_PHONE 
12-01 15:36:54.912: D/Permissions requested is+(20783): android.permission.CAMERA 
12-01 15:36:54.913: D/Permission is already granted(20783): android.permission.CAMERA 
12-01 15:36:54.921: D/Permissions requested is+(20783): android.permission.RECORD_AUDIO 
12-01 15:36:54.923: D/Permission is already granted(20783): android.permission.RECORD_AUDIO 
+0

Warum nicht versuchen Sie alle Berechtigungen an einem ActivityCompat.requestPermissions fragen (this, new String [] {Manifest.permission.GET_ACCOUNTS, Manifest.permission.READ_SMS, Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_GET_ACCOUNTS); – Tasneem

+0

'arbeitet daran, dem Android-Gerät die Laufzeitberechtigungen zu geben'. Nein, nicht zu deinem Gerät. Aber zu deiner App. Code, damit der Benutzer Ihrer App Berechtigungen erteilen kann. – greenapps

+0

Check [this] (http://stackoverflow.com/a/40798994/6422096) Link kann Ihnen helfen! –

Antwort

1

Lassen Sie diese Methode überschreiben, wird es die Ergebnisse Handler.

@Override 
    public void onRequestPermissionsResult(int requestCode, 
      String permissions[], int[] grantResults) { 
     switch (requestCode) { 
      case MY_PERMISSIONS_REQUEST_READ_CONTACTS: { 
       // If request is cancelled, the result arrays are empty. 
       if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

        // permission was granted, yay! Do the 
        // contacts-related task you need to do. 

       } else { 

        // permission denied, boo! Disable the 
        // functionality that depends on this permission. 
       } 
       return; 
      } 

      // other 'case' lines to check for other 
      // permissions this app might request 
     } 
    } 
Verwandte Themen