2010-11-17 43 views
10

我認爲應該可以從清單文件中描述的「第三方」應用程序獲取所有活動。 我無法弄清楚如何。如何列出應用程序公開的所有活動?

例如:

List<Activity> aList = packManager.getActivitiesForPackage("package.name"); 

在此先感謝!

回答

6

您應該可以使用PackageManagergetPackageArchiveInfo()使用GET_ACTIVITIES標誌來做到這一點。我還沒有嘗試過,雖然

7

感謝您的答案!

我想我找到了列出所有活動的應用程序上的解決方案,雖然不是最優雅...

//the method gets all activities for an application 
private void getAppActivities() { 
    PackageManager pManager = getPackageManager(); 
    Intent startIntent = setStartIntent(); 
    List<ResolveInfo> apps = pManager.queryIntentActivities(startIntent, 0); 
    int count = apps.size(); 
    for (int i = 0; i < count; i++) { 
     ResolveInfo info = apps.get(i); 
     String packageName = info.activityInfo.packageName; 
     Intent intent = new Intent(); 
     intent.setPackage(packageName); 

     //activities holds the activities defined in the package 
     List<ResolveInfo> activities = pManager.queryIntentActivities(intent, 0); 
    } 
} 
+0

這是什麼setStartIntent()? – RejoylinLokeshwaran 2017-06-22 10:58:12

9
private void getActivityList() throws NameNotFoundException { 
    Intent i = new Intent(Intent.ACTION_MAIN); 
    i.addCategory(Intent.CATEGORY_LAUNCHER); 
    PackageManager pm = this.getPackageManager(); 

    PackageInfo info = pm.getPackageInfo("com.packagename", PackageManager.GET_ACTIVITIES); 

    ApplicationInfo test = info.applicationInfo; 
    ActivityInfo[] list = info.activities; 

} 
+0

在哪裏使用我的意圖? @easycheese – Tiger98 2016-11-17 08:15:43

6

如果你有應用程序上下文,然後使用該命令:

private static void listAllActivities(Context context) { 
    PackageManager pManager = context.getPackageManager(); 
    String packageName = context.getApplicationContext().getPackageName(); 

    try { 
     ActivityInfo[] list = pManager.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES).activities; 
     for (ActivityInfo activityInfo : list) { 
      Log.d(TAG, "ActivityInfo = " + activityInfo.name); 
     } 
    } catch (PackageManager.NameNotFoundException e) { 
     e.printStackTrace(); 
    } 
} 
相關問題