2016-12-01 82 views
1

我正在给运行时权限给我的android设备。在我的情况下,只要用户点击通话按钮,它应该要求3个权限CALL_PHONE,CAMERA和RECORD_AUDIO。 它要求我可以在日志中看到的权限,但只有一个权限被授予。再次,如果我杀了我的应用程序,并点击Call按钮,现在正在询问第二个权限,并且nxt时间是lats之一。所有3个都没有被同时询问。正如我在日志中看到的那样,它只会在第一时间询问并授予所有许可,但一次只能询问一个。在android棉花糖没有被授予的所有权限

@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

你为什么不试着问所有权限在一个ActivityCompat.requestPermissions(这一点,新的String [] {Manifest.permission.GET_ACCOUNTS,Manifest.permission.READ_SMS,Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_GET_ACCOUNTS); – Tasneem

+0

'工作时给予我的android设备运行时权限。不,不要你的设备。但对你的应用程序。代码,以便用户可以将权限授予您的应用程序。 – greenapps

+0

检查[this](http://stackoverflow.com/a/40798994/6422096)链接它可能会帮助你! –

回答

1

让重写此方法,它将处理程序的结果。

@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 
     } 
    }