Определить список разрешений, используемых установленным приложением в Android

Мне нужно определить список разрешений, используемых каждым установленным приложением на моем устройстве.

У меня есть список установленных приложений и там имя пакета, используя следующий код:

PackageManager pm = this.getPackageManager(); Intent intent = new Intent(Intent.ACTION_MAIN, null); intent.addCategory(Intent.CATEGORY_LAUNCHER); List<ResolveInfo> list = m.queryIntentActivities(intent,PackageManager.PERMISSION_GRANTED); for (ResolveInfo rInfo : list) { Log.d("Installed Applications", rInfo.activityInfo.applicationInfo .loadLabel(pm).toString()); Log.d("packegename",rInfo.activityInfo.applicationInfo.packageName. toString()); } 

Как получить разрешение, используемое каждым приложением?

Проверьте freetaskmanager

  // Loop through all installed packaged to get a list of used permissions and PackageInfos for (PackageInfo pi : appList) { // Do not add System Packages if ((pi.requestedPermissions == null || pi.packageName.equals("android")) || (pi.applicationInfo != null && (pi.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0)) continue; for (String permission : pi.requestedPermissions) { Map<String, String> curChildMap = new HashMap<String, String>(); try { PermissionInfo pinfo = mPm.getPermissionInfo(permission, PackageManager.GET_META_DATA); CharSequence label = pinfo.loadLabel(mPm); CharSequence desc = pinfo.loadDescription(mPm); } catch (NameNotFoundException e) { Log.i(TAG, "Ignoring unknown permission " + permission); continue; } } } 

Поэтому я закодировал его. Мне нужны не только разрешения, но и приемники и services.pls, чтобы увидеть следующий код, надеясь, что он будет полезен другим.

 PackageManager p = this.getPackageManager(); final List <PackageInfo> appinstall=p.getInstalledPackages(PackageManager.GET_PERMISSIONS|PackageManager.GET_RECEIVERS| PackageManager.GET_SERVICES|PackageManager.GET_PROVIDERS); for(PackageInfo pInfo:appinstall){ //PermissionInfo[] permission=pInfo.permissions; String[] reqPermission=pInfo.requestedPermissions; ServiceInfo[] services=pInfo.services; ProviderInfo[] providers=pInfo.providers; int versionCode=pInfo.versionCode; Log.d("versionCode-package ",Integer.toString(versionCode)); Log.d("Installed Applications", pInfo.applicationInfo .loadLabel(pm).toString()); Log.d("packegename",pInfo.packageName. toString()); if(reqPermission!=null) for(int i=0;i<reqPermission.length;i++) Log.d("permission list",reqPermission[i]); 

}

Флаги установки NOTICE важны, в противном случае это вызывает проблемы. Nu cnt get services, provider ПРИМЕЧАНИЕ. ПРОВЕРКА NULL – ИМП ИЛИ ЭТО ДАЕТ NPE

Также предыдущий код, который я написал ws, используя activityInfo, этот использует packageInfo. Лучше теперь я думаю 🙂 happy coding ppl 🙂

Здесь, как получить список приложений, установленных на устройстве Android, и разрешения, используемые каждым приложением.

 private static final String TAG = "MyActivity"; ... final PackageManager pm = getPackageManager(); final List<ApplicationInfo> installedApps = pm.getInstalledApplications(PackageManager.GET_META_DATA); for ( ApplicationInfo app : installedApps ) { //Details: Log.d(TAG, "Package: " + app.packageName); Log.d(TAG, "UID: " + app.uid); Log.d(TAG, "Directory: " + app.sourceDir); //Permissions: StringBuffer permissions = new StringBuffer(); try { PackageInfo packageInfo = pm.getPackageInfo(app.packageName, PackageManager.GET_PERMISSIONS); String[] requestedPermissions = packageInfo.requestedPermissions; if ( requestedPermissions != null ) { for (int i = 0; i < requestedPermissions.length; i++) { permissions.append(requestedPermissions[i] + "\n"); } Log.d(TAG, "Permissions: " + permissions); } } catch ( PackageManager.NameNotFoundException e ) { e.printStackTrace(); } } 

Это единственное, что я нашел, хотя я его не тестировал.

Дайте мне знать, если он работает для любого:

 pm.getPackageInfo(rInfo.activityInfo.applicationInfo.packageName, packageManager.GET_PERMISSIONS);