使用包名获取所有活动

7

我想通过使用PackageInfo以列表的形式获取应用程序中的所有活动。请告诉我是否有方法可以实现。

提前致谢。


好的,试试这个,它会帮助你。http://stackoverflow.com/questions/23669277/how-to-get-all-homescreens-in-android/23670155#23670155 - Rohit Goswami
这是我知道的,它用于获取所有应用程序列表。但我想要获取应用程序中所有活动名称。 - Santhi Bharath
@Leena,你的意思是想从一个应用程序中获取所有活动名称还是从所有已安装的应用程序中获取? - Pratik Dasa
@Leena 看看我的回答,如果对你有用的话。 - Pratik Dasa
好的,我明白了,请检查包管理器getPackageArchiveInfo(archiveFilePath, flags)的方法;在这里,您可以检索有关包存档文件中定义的应用程序包的总体信息,并设置GET_ACTIVITIES标志。 - Rohit Goswami
2个回答

17

我得到了以下回答:

public static ArrayList<ActivityInfo> getAllRunningActivities(Context context) {
    try {
        PackageInfo pi = context.getPackageManager().getPackageInfo(
                context.getPackageName(), PackageManager.GET_ACTIVITIES);

        return new ArrayList<>(Arrays.asList(pi.activities));

    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
        return null;
    }
}

谢谢,请将其标记为答案。 :) - Hossein
1
不要像“com.mobeta.android.demodslv”一样硬编码包名,而是使用Context.getPackageName()使代码可在项目之间重复使用。 - Someone Somewhere
需要注意的是,此方法仅返回已启用/导出的活动,而不一定是在AndroidManifest.xml文件中列出的所有活动。要检索所有活动,必须解析清单或使用aapt,请参见https://dev59.com/GGw15IYBdhLWcg3wisW-。 - auermich

1

尝试以下代码:

final PackageManager pm = getPackageManager();

        Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);

        List<ResolveInfo> appList = pm.queryIntentActivities(mainIntent, 0);
        Collections.sort(appList, new ResolveInfo.DisplayNameComparator(pm));

        for (ResolveInfo temp : appList) {

            Log.v("my logs", "package and activity name = "
                    + temp.activityInfo.packageName + "    "
                    + temp.activityInfo.name);


        }

这将列出手机上安装的应用程序的所有主要活动。 - Someone Somewhere

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接