Получить список установленных приложений для Android
Привет, я хочу получить список всех установленных приложений на устройстве пользователя, которое я долго гуглял, но не могу найти то, что я хочу, эта ссылка была самой близкой и работает нормально, за исключением того, что я новичок, не понимаю как использовать метод getPackages(); и создать список с ним
http://www.androidsnippets.com/get-installed-applications-with-name-package-name-version-and-icon
Любая помощь в том, как создать реальный список, была бы большой помощью, у меня есть весь этот код, уже просто не могу получить список, чтобы фактически показать спасибо за любую помощь
1 ответ
Я работал над чем-то вроде этого недавно. В начале я скажу одну вещь: убедитесь в этом и выполните это в отдельном потоке - запрос информации о приложении - МЕДЛЕННЫЙ. Далее вы получите список ВСЕХ установленных приложений. Это будет включать в себя множество системных приложений, которые вам, вероятно, не интересны.
PackageManager pm = getPackageManager();
List<ApplicationInfo> apps = pm.getInstalledApplications(0);
Чтобы ограничить его только установленными пользователем или обновленными системными приложениями (например, Maps, GMail и т. Д.), Я использовал следующую логику:
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) != 0) {
installedApps.add(app);
//it's a system app, not interested
} else if ((app.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
//Discard this one
//in this case, it should be a user-installed app
} else {
installedApps.add(app);
}
}
РЕДАКТИРОВАТЬ: Кроме того, чтобы получить имя и значок для приложения (что, вероятно, занимает больше всего времени - я не сделал никакого глубокого изучения этого - используйте это:
String label = (String)pm.getApplicationLabel(app);
Drawable icon = pm.getApplicationIcon(app);
Установленные приложения должны иметь полный список необходимых вам приложений. Надеюсь, это поможет, но вам, возможно, придется немного изменить логику в зависимости от того, какие приложения вам нужно вернуть. Опять же, это МЕДЛЕННО, но это просто то, что вы должны обойти. Возможно, вы захотите создать кеш данных в базе данных, если к этому вы будете часто обращаться.