如何從代碼中檢查manifest.xml中的特定權限?我想拋出一些異常,如果我的應用程序需要一些權限丟失。有沒有辦法檢查代碼的清單許可?
例如,FINE_LOCATION
和COARSE_LOCATION
我知道Android也將扔在推出即使用GPS的具體activiy的例外,但我需要檢查的清單,並在推出的應用程序拋出異常本身。這不僅適用於位置訪問,也適用於其他權限。
任何建議將有所幫助。
如何從代碼中檢查manifest.xml中的特定權限?我想拋出一些異常,如果我的應用程序需要一些權限丟失。有沒有辦法檢查代碼的清單許可?
例如,FINE_LOCATION
和COARSE_LOCATION
我知道Android也將扔在推出即使用GPS的具體activiy的例外,但我需要檢查的清單,並在推出的應用程序拋出異常本身。這不僅適用於位置訪問,也適用於其他權限。
任何建議將有所幫助。
您可以通過使用PackageManager來檢查權限是否被授予特定權限。例如
PackageManager pm = getPackageManager();
if (pm.checkPermission(permission.FINE_LOCATION, getPackageName()) == PackageManager.PERMISSION_GRANTED) {
// do something
} else {
// do something
}
您可以在運行時使用以下代碼讀取可用的<uses-permission>
標籤。在較舊的Android版本上進行測試AND Android 6和7
PackageManager pm = getPackageManager();
try
{
PackageInfo packageInfo = pm.getPackageInfo(getPackageName(), PackageManager.GET_PERMISSIONS);
String[] requestedPermissions = null;
if (packageInfo != null) {
requestedPermissions = packageInfo.requestedPermissions;
}
if (requestedPermissions != null && requestedPermissions.length > 0)
{
List<String> requestedPermissionsList = Arrays.asList(requestedPermissions);
ArrayList<String> requestedPermissionsArrayList = new ArrayList<String>();
requestedPermissionsArrayList.addAll(requestedPermissionsList);
Log.i(ExConsts.TAG, ""+requestedPermissionsArrayList);
}
}
catch (PackageManager.NameNotFoundException e)
{
e.printStackTrace();
}
如果將targetSdkVersion設置爲23,則上述解決方案將無法在Android 6.0上運行 – user2448396