【问题标题】:Determine list of permissions used by an installed application in Android确定 Android 中已安装应用程序使用的权限列表
【发布时间】:2010-12-16 13:58:31
【问题描述】:

我必须确定设备上安装的应用程序使用的权限列表。

我已经使用以下代码获得了安装的应用程序列表和软件包名称:

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

如何获得每个应用程序使用的权限?

【问题讨论】:

    标签: android permissions


    【解决方案1】:

    所以我对其进行了编码。我不仅需要权限,还需要接收者和服务。请参阅以下代码,希望对其他人有用。

    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]);
    

    }

    注意设置标志很重要,否则会导致问题 n u cnt get services ,provider 注意 - NULL CHECK 是 IMP 或它给出 NPE

    还有我之前使用activityInfo编写的ws的代码,这个使用packageInfo。我猜现在更好了:) 快乐的编码 ppl :)

    【讨论】:

      【解决方案2】:

      这里如何检索安装在 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();
          }
      }
      

      【讨论】:

      • 谢谢老哥,对我有用
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        这是我发现的唯一东西,虽然我还没有测试过。

        让我知道它是否适用于任何人:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-06
          相关资源
          最近更新 更多