我想獲得所有授予的權限。我知道我可以通過packageinfo.requestedPermissions
得到所有請求的權限,但我想知道授予的權限列表和授予的權限可以較小,然後請求在Android的情況下。所以我只是想知道,有我可以得到所有列表授予權限?如何獲取應用程序的所有授予的權限
我從請求的權限列表中知道我可以檢查是否授予了天氣權限,但我想知道所有授予權限的列表。不想檢查每個請求的權限。
我想獲得所有授予的權限。我知道我可以通過packageinfo.requestedPermissions
得到所有請求的權限,但我想知道授予的權限列表和授予的權限可以較小,然後請求在Android的情況下。所以我只是想知道,有我可以得到所有列表授予權限?如何獲取應用程序的所有授予的權限
我從請求的權限列表中知道我可以檢查是否授予了天氣權限,但我想知道所有授予權限的列表。不想檢查每個請求的權限。
一個簡單的函數,返回已請求和授予給定包可能看起來像這樣的所有權限:
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或以上,但應該希望這些日子不成爲問題。
你試過嗎?爲此,你應該通過你的陣列迭代
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+會造成一定的系統對話框出現
你可以通過一個查詢的權限之一,並添加到列表:
//我們應該表現出說明?
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);
}
我沒有看到什麼問題是寫一個循環遍歷'requestedPermissions'並檢查相應的'requestedPermissionsFlags'元素是否包含'REQUESTED_PERMISSION_GRANTED'。這就是旗幟的用途。如果您需要多次創建一個函數,請爲其創建一個函數。 – Michael
謝謝,沒有問題,我只是想有一種方法來獲得所有授予的權限列表,但現在我認爲不是這樣做會做你的建議。你也可以爲此寫回答,這比其他答案更好。 – HariRam