Получение информации о приложении из менеджера пакетов - PullRequest
4 голосов
/ 21 июня 2011

Есть ли способ извлечь объект ApplicationInfo из PackageManager? Я пробовал много разных типов методов для достижения этой цели, но безрезультатно. В настоящее время я работаю над экраном запуска Android по умолчанию (Application Drawer) и хотел бы получить информацию о пакете конкретно из имени пакета. Это не на уровне приложения, а на уровне сборки приложения Launcher2, источника. Версия Android, с которой я работаю, - 2.3.3.

Вот что я пробовал:

ApplicationInfo item = pack.getApplicationInfo(package_list.get(i), PackageManager.GET_ACTIVITIES);

Ошибка:

Type mismatch: cannot convert from android.content.pm.ApplicationInfo to com.android.launcher2.ApplicationInfo

Это не для получения текущего запущенного пакета, а для ВСЕХ приложений на самом телефоне.

Я обнаружил, что:

pack.getApplicationInfo(packageName, flags)

Не возвращает тот же объект ApplicationInfo, что и ApplicationInfo, переданный в функцию ниже в AllApps2D.java:

.
public void addApps(ArrayList<ApplicationInfo> list)

Я пытаюсь извлечь объект ApplicationInfo из самого пакета, используя только имя.

Данная функция находится ниже, как показано в открытом исходном коде AllApps2D.java (папка Launcher2)

 private ArrayList<ApplicationInfo> mAllAppsList = new ArrayList<ApplicationInfo>();

 public void addApps(ArrayList<ApplicationInfo> list) {
        final int N = list.size();

        for (int i=0; i<N; i++) {
            final ApplicationInfo item = list.get(i);
            int index = Collections.binarySearch(mAllAppsList, item,
                    LauncherModel.APP_NAME_COMPARATOR);
            if (index < 0) {
                index = -(index+1);
            }
            mAllAppsList.add(index, item);
        }
        mAppsAdapter.notifyDataSetChanged();
    }

UPDATE

По сути, я пытаюсь изменить порядок расположения значков в программе запуска в произвольном порядке. Было бы идеально, если бы я мог получить необходимую для этого информацию через PackageManager.

Для того, что я реализовал для работы, я должен иметь возможность вытащить ЖЕ Объект ApplicationInfo, который использует код AllApps2D, который, по-видимому:

com.android.Launcher2.ApplicationInfo

Что не совпадает с тем, что возвращается:

ApplicationInfo item = pack.getApplicationInfo(package_list.get(i), PackageManager.GET_ACTIVITIES);

что составляет:

android.content.pm.ApplicationInfo

Код, доступный для модуля запуска, и класс, с которым я работаю, найден здесь .

Ни один из этих методов не работает WITH * приложение launcher2 в сборке Android. Есть еще предложения?

Ответы [ 2 ]

7 голосов
/ 21 июня 2011

Если вы хотите получить все приложения, сделайте это:

import android.content.pm.ApplicationInfo;

...

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

Информация об одном приложении (учитывая, что вы знаете его имя пакета манифеста), делается в строке:

import android.content.pm.ApplicationInfo;

...

ApplicationInfo app = context.getPackageManager().getApplicationInfo(packageName, 0);
0 голосов
/ 21 июня 2011
           ArrayList<PInfo> res = new ArrayList<PInfo>();
    final PackageManager pm = getPackageManager();
    List<ApplicationInfo> packages = pm
            .getInstalledApplications(PackageManager.GET_META_DATA);
    appName = new String[packages.size()];
    for (ApplicationInfo packageInfo : packages) {
    appName[count] = packageInfo.loadLabel(getPackageManager()).toString();
    count++;
    }

Приведенный выше код используется для получения всей информации об установленном приложении на устройстве Android, например, версии, логотипа, имени приложения, имени пакета, разрешения и всей информации об установленном приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...