應用程序在運行過程中所需要的權限是被寫在應用的 AndroidManifest.xml 下的,在 Android 中這些信息是被封裝在 PackageInfo 中的,所以要獲取權限的信息,我們就需要先獲取到 PackageManager ,再通過 PackageManager 獲取指定條件的 PackageInfo 信息,通過比對 PackageInfo 所攜帶的權限信息來判斷對應的應用是否具有 Internet 的權限,判斷應用是否具有其他權限同理。實現代碼如下:
public void getInternetAppInfos() { /************************ 獲取包管理器 *************************/ PackageManager manager = getPackageManager(); /** 獲取未被卸載同時在清單文件中設置了 <uses-permission> 的包信息 **/ List<PackageInfo> packageInfos = manager.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES | PackageManager.GET_PERMISSIONS); /****** 遍歷獲取包信息及包信息中包含的 <uses-permission> 信息 *****/ for (PackageInfo info : packageInfos) { String[] permissions = info.requestedPermissions; if (permissions != null) { for (String permission : permissions) { if (permission.equals(Manifest.permission.INTERNET)) { ApplicationInfo appInfo = info.applicationInfo; String appname = appInfo.loadLabel(manager).toString(); String packageName = appInfo.packageName; int uid = appInfo.uid; System.out.println(appname + ":" + packageName + ":" + uid); } } } } }