Я пытаюсь получить все приложения с пользовательского устройства. И есть много примеров, как это сделать. Однако - я хочу показывать только приложения, которые показаны в 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;
Зв Есть идеи, как это сделать?
Это прекрасно работает! Однако некоторые из приложений перечислены более одного раза. Я помню, что я видел решение для этого, но я не могу найти его прямо сейчас ... –
@a_dzik отредактировал мой ответ –
Спасибо! Я думал, что есть более «умный» способ сделать это, но HashSet тоже прекрасен. Еще раз спасибо! –