2016-05-18 164 views
3

我想獲得所有授予的權限。我知道我可以通過packageinfo.requestedPermissions得到所有請求的權限,但我想知道授予的權限列表和授予的權限可以較小,然後請求在Android的情況下。所以我只是想知道,有我可以得到所有列表授予權限?如何獲取應用程序的所有授予的權限

我從請求的權限列表中知道我可以檢查是否授予了天氣權限,但我想知道所有授予權限的列表。不想檢查每個請求的權限。

+0

我沒有看到什麼問題是寫一個循環遍歷'requestedPermissions'並檢查相應的'requestedPermissionsFlags'元素是否包含'REQUESTED_PERMISSION_GRANTED'。這就是旗幟的用途。如果您需要多次創建一個函數,請爲其創建一個函數。 – Michael

+0

謝謝,沒有問題,我只是想有一種方法來獲得所有授予的權限列表,但現在我認爲不是這樣做會做你的建議。你也可以爲此寫回答,這比其他答案更好。 – HariRam

回答

11

一個簡單的函數,返回已請求和授予給定包可能看起來像這樣的所有權限:

List<String> getGrantedPermissions(final String appPackage) { 
    List<String> granted = new ArrayList<String>(); 
    try { 
     PackageInfo pi = getPackageManager().getPackageInfo(appPackage, PackageManager.GET_PERMISSIONS); 
     for (int i = 0; i < pi.requestedPermissions.length; i++) { 
      if ((pi.requestedPermissionsFlags[i] & PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0) { 
       granted.add(pi.requestedPermissions[i]); 
      } 
     } 
    } catch (Exception e) { 
    } 
    return granted; 
} 

注意,這需要API級別16或以上,但應該希望這些日子不成爲問題。

+0

有沒有辦法讓所有授予應用程序的權限組? –

+0

@Michael:你能解釋一下這個聲明實際上做了什麼(pi.requestedPermissionsFlags [i]&PackageInfo.REQUESTED_PERMISSION_GRANTED)!= 0 – saravanan

+0

'requestedPermissionsFlags'是一個標籤數組,包含所有''。 而'REQUESTED_PERMISSION_GRANTED'是'requestedPermissionsFlags'中條目的掩碼,用於檢查當前是否嚮應用程序授予請求的權限。 – Michael

0

你試過嗎?爲此,你應該通過你的陣列迭代

boolean permissionGranted = PermissionChecker.checkSelfPermission(MyActivity.this, 
        android.Manifest.permission.WRITE_EXTERNAL_STORAGE) 
        == PackageManager.PERMISSION_GRANTED; 

也有獲取所需Parmissions像下面的方法:

private static String[] PERMISSIONS = { 
     android.Manifest.permission.READ_EXTERNAL_STORAGE, 
     android.Manifest.permission.WRITE_EXTERNAL_STORAGE 
}; 

ActivityCompat.requestPermissions(
         MyActivity.this, 
         PERMISSIONS, 
         REQUEST_EXTERNAL_STORAGE 
       ); 

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

只是所有的權限收拾PERMISSIONS陣列,但要知道,在這個6.0+會造成一定的系統對話框出現

0

你可以通過一個查詢的權限之一,並添加到列表:

//我們應該表現出說明?

 List<String> listPermissionsNeeded = new ArrayList<>(); 
     // No explanation needed, we can request the permission. 
     if((ContextCompat.checkSelfPermission(context, 
       Manifest.permission.WRITE_EXTERNAL_STORAGE) 
       != PackageManager.PERMISSION_GRANTED)) 
     { 
      listPermissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); 
     } 
     if((ContextCompat.checkSelfPermission(context, 
       Manifest.permission.GET_ACCOUNTS) 
       != PackageManager.PERMISSION_GRANTED)) 
     { 
      listPermissionsNeeded.add(Manifest.permission.GET_ACCOUNTS); 
     } 
     if((ContextCompat.checkSelfPermission(context, 
       Manifest.permission.ACCESS_COARSE_LOCATION) 
       != PackageManager.PERMISSION_GRANTED)) 
     { 
      listPermissionsNeeded.add(Manifest.permission.ACCESS_COARSE_LOCATION); 
     } 
     if((ContextCompat.checkSelfPermission(context, 
       Manifest.permission.ACCESS_COARSE_LOCATION) 
       != PackageManager.PERMISSION_GRANTED)) 
     { 
      listPermissionsNeeded.add(Manifest.permission.ACCESS_FINE_LOCATION); 
     } 
     if((ContextCompat.checkSelfPermission(context, 
       Manifest.permission.READ_PHONE_STATE) 
       != PackageManager.PERMISSION_GRANTED)) 
     { 
      listPermissionsNeeded.add(Manifest.permission.READ_PHONE_STATE); 
     } 
     if (!listPermissionsNeeded.isEmpty()) { 
      ActivityCompat.requestPermissions(context, 
        listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), 
        MY_PERMISSIONS_REQUEST_MULTIPLE_PERMISSION); 
     } 
相關問題