2010-12-16 35 views
3

我必須確定我的設備上安裝的應用程序使用的每個權限的列表。確定安裝的應用程序在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()); 
    } 

我如何使用每個應用程序的權限?

回答

1

退房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; 
      } 
     } 
    } 
0

這是我發現的唯一的東西,雖然我沒有測試過它。

讓我知道,如果它可以用於任何一個:

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

所以我編碼它。我需要的不僅僅是權限,但也recievers和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]); 

}

注意,設置標誌是很重要的,否則它會導致問題NU CNT得到服務,提供 筆記記錄NULL檢查IMP或散發NPE

還前面的代碼我寫WS使用activityInfo這一個使用packageInfo現在.IT更好的我猜:) 編碼快樂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(); 
    } 
} 
+0

謝謝兄弟,這對我很有用 – vuhung3990 2014-04-05 09:42:13

相關問題