Получить список установленных приложений для Android - PullRequest
16 голосов
/ 29 мая 2011

Привет! Я хочу получить список всех установленных приложений на устройстве пользователя, которое я долго гуглял, но не могу найти то, что я хочу, эта ссылка была самой близкой и работает нормально, за исключением того, что я новичок. не понимаю, как использовать метод getPackages (); и создайте список с ним

http://www.androidsnippets.com/get-installed-applications-with-name-package-name-version-and-icon

Любая помощь в том, как создать реальный список, была бы большой помощью, у меня уже есть весь этот код, просто я не могу получить список, чтобы фактически показать спасибо за любую помощь

1 Ответ

62 голосов
/ 29 мая 2011

Я недавно работал над чем-то вроде этого. Прежде всего я хочу сказать одно: убедиться в этом и выполнить это в отдельном потоке - запрос информации о приложении - МЕДЛЕННЫЙ. Далее вы получите список ВСЕХ установленных приложений. Это будет включать множество системных приложений, которые вам, вероятно, не интересны.

PackageManager pm = getPackageManager();
List<ApplicationInfo> apps = pm.getInstalledApplications(0);

Чтобы ограничить его только установленными пользователем или обновленными системными приложениями (например, Карты, 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);

Установленные приложения должны иметь полный список необходимых вам приложений. Надеюсь, это поможет, но вам, возможно, придется немного изменить логику в зависимости от того, какие приложения вам нужно вернуть. Опять же, это МЕДЛЕННО, но это просто то, что вы должны обойти. Возможно, вы захотите создать кеш данных в базе данных, если вы часто обращаетесь к нему.

...