简体   繁体   English

确定Android中已安装应用程序使用的权限列表

[英]Determine list of permissions used by an installed application in Android

I have to determine list of permission used each by the installed application on my device. 我必须确定我的设备上已安装的应用程序使用的权限列表。

I have got the list of applications installed and there package name using the following code: 我已经安装了应用程序列表,并使用以下代码包名称:

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());
     }

How do I get permission used by each application? 我如何获得每个应用程序使用的权限?

So i coded it.i needed not just the permissions but also the recievers and services.pls see the following code,hope its useful for others. 所以我编码it.i不仅需要权限,还需要接收者和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-setting flags is important otherwise it causes problem nu cnt get services ,provider NOTE- NULL CHECK IS IMP OR IT GIVES NPE 注意设置标志很重要,否则它会导致问题获取服务,提供商注意 - 空检查是影响还是它给NPE带来了压力

also the previous code i wrote ws using activityInfo this one uses packageInfo .it better now i guess :) happy coding ppl :) 还有以前的代码,我使用activityInfo写了这个使用packageInfo。更好的现在我猜:)快乐编码ppl :)

Here how to retrieve the list of the apps installed on an Android device, and the permissions used by every app. 这里是如何检索安装在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();
    }
}

Check out freetaskmanager 查看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;
            }
        }
    }

This is the only thing I found, though I've not tested it out. 这是我发现的唯一一件事,虽然我没有测试过。

Let me know if it works for any one: 如果它适用于任何一个,请告诉我:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM