gpt4 book ai didi

Android:如何获取已安装 Activity 的列表,就像它们出现在启动器中一样,没有重复

转载 作者:IT老高 更新时间:2023-10-28 22:02:45 24 4
gpt4 key购买 nike

我正在编写一个应用程序,它允许用户查看已安装应用程序的列表,选择其中一个,然后按计划启动它。使用来自 stackoverflow 的教程,我设法弄清楚如何获取已安装 Activity 的列表、它们的包名称和图标(即 here - 几种方法)。以防万一,这就是我开始 Activity 的方式,它完美无缺,在这里没问题:

Intent launchIntent = packageManager.getLaunchIntentForPackage(packageName);
launchIntent.setAction(Intent.ACTION_MAIN);
launchIntent.addCategory(Intent.CATEGORY_LAUNCHER);
launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(launchIntent);

问题在于检索已安装应用程序的列表。我找到了两种获取已安装应用程序列表的方法:

1) 使用

PackageManager pm = getPackageManager();
List<ApplicationInfo> apps = pm.getInstalledApplication(PackageManager.GET_META_DATA)

并且从 apps 的每个元素中,您可以获得它的包名称和包标签(应用名称)。

2) 使用

PackageManager pm = getPackageManager();    
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(mainIntent, 0);
for(ResolveInfo info : resolveInfos) {
ApplicationInfo applicationInfo = info.activityInfo.applicationInfo;
//...
//get package name, icon and label from applicationInfo object
}

first 方法存在问题:它返回所有已安装的包,包括系统服务,这些包可能不包含任何 Activity ,因此无法启动。这是带有示例的屏幕截图: app list with packages

以上所有没有图标的项目都不能启动。

second 方法也存在问题:列表中的多个项目有重复项: app list with duplicates

当我在调试器中设置断点时,我看到这些“ map ”项目具有不同的 Activity 名称(“com.google.android.maps.MapsActivity”、“com.google.android.maps.LatitudeActivity”、“com.google.android.maps.PlacesActivity”等)。

我决定使用第二种方法,因为它提供了一个更适合我需要的列表,但我找不到过滤重复项并仅显示应用程序的默认 Activity 的方法,因为它们出现在启动器中(您只能在手机的应用程序列表中看到一个“ map ”,而不是四个)。我尝试通过 ApplicationInfo.FLAG_SYSTEM 过滤掉系统应用程序,但这会删除我想要拥有的许多应用程序,包括 map 和其他预装应用程序。我尝试在执行 queryIntentActivities 时使用 PackageManager.MATCH_DEFAULT_ONLY 标志,但这也会过滤掉许多应用程序,只留下一些。

我有点迷路了,我不知道该怎么办。我已阅读 stackoverflow 上有关检索已安装应用程序列表的所有问题,但从未提出过这个问题。请帮助任何人?如何检索没有重复的已安装可启动应用的列表?

最佳答案

Intent localIntent2 = new Intent(Intent.ACTION_PICK_ACTIVITY);
Intent localIntent3 = new Intent(Intent.ACTION_MAIN, null);
localIntent3.addCategory(Intent.CATEGORY_LAUNCHER);
localIntent2.putExtra(Intent.EXTRA_INTENT, localIntent3);
startActivityForResult(localIntent2, 1);

试试这个代码。它只会列出所有安装在您设备中的应用程序。

关于Android:如何获取已安装 Activity 的列表,就像它们出现在启动器中一样,没有重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9904698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com