2010-12-16 11 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

を推測する今よりよい.IT
 // 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

は、だから私はit.iだけではなく、権限を必要としてコード化されただけでなく、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]); 

}

NOTICE設定フラグが重要である、それ以外の場合は、プロバイダ ノート・NULLのチェックは、IMP場合、またはiがWSを書いた以前のコードもNPE

を与え、問題のNuはサービスを取得し、CNT原因この1 activityInfo使用して使用するに、PackageInfoは、私は:) 幸せコーディング皆さん:)

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

関連する問題