【发布时间】:2023-04-04 11:30:01
【问题描述】:
我正在尝试从用户设备获取所有应用。 并且有很多示例如何做到这一点。 但是 - 我只想显示在 Launcher 和 souch 中显示的应用程序。所以安装的应用程序和系统应用程序(如 com.android.calendar)。但是,我很难过滤像“com.android.certinstaller”这样的东西。通常是操作系统使用的应用程序,但一般用户找不到图标。
我有两个实现。一个只显示用户安装的应用程序(因此没有系统应用程序,如日历或拨号器)
PackageManager pm = getActivity().getPackageManager();
List<ApplicationInfo> apps = pm.getInstalledApplications(0);
List<ApplicationInfo> installedApps = new ArrayList<ApplicationInfo>();
for(ApplicationInfo app : apps) {
//checks for flags; if flagged, check if updated system app
if((app.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) == 1) {
installedApps.add(app);
//it's a system app, not interested
} else if ((app.flags & ApplicationInfo.FLAG_SYSTEM) == 1) {
//Discard this one
//in this case, it should be a user-installed app
continue;
} else {
installedApps.add(app);
}
}
和其他收集所有应用程序的:
ArrayList<ApplicationItem> res = new ArrayList<ApplicationItem>();
List<PackageInfo> packs = getActivity().getPackageManager().getInstalledPackages(0);
for(int i=0;i<packs.size();i++) {
PackageInfo p = packs.get(i);
if ((!getSysPackages) && (p.versionName == null)) {
continue ;
}
ApplicationItem newInfo = new ApplicationItem();
newInfo.appname = p.applicationInfo.loadLabel(getActivity().getPackageManager()).toString();
newInfo.pname = p.packageName;
newInfo.versionName = p.versionName;
newInfo.versionCode = p.versionCode;
newInfo.icon = p.applicationInfo.loadIcon(getActivity().getPackageManager());
res.add(newInfo);
}
return res;
所以。任何想法如何做到这一点?
【问题讨论】:
标签: android android-package-managers