Как получить ActivityInfo из приложения Люди / Контакты из PackageManager? - PullRequest
2 голосов
/ 31 августа 2011

Часть моего приложения - это средство запуска, где пользователь может добавлять (или удалять) приложения в сетке.Код, который я использую для получения ActivityInfo, следующий:

Intent intent = new Intent();
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setAction(Intent.ACTION_MAIN);
intent.setPackage(packageName);
ResolveInfo rInfo = getPackageManager().resolveActivity(intent, 0);

ActivityInfo aInfo = rInfo.activityInfo;

Это позволяет мне извлечь значок и метку Activity для всех других действий и отобразить их в сетке, но в случае системыПриложение Контакты или Люди, извлеченный значок является системным значком по умолчанию, а метка - «Система Android».

Как извлечь правильную информацию об активности для приложения Люди?

Примечание.Причина, по которой я извлекаю действия (resolActivity ()) вместо приложений, заключается в том, что некоторые приложения определяют более одного действия средства запуска, и мне нужно найти все действия с категорией = средство запуска.

1 Ответ

3 голосов
/ 31 августа 2011

Я решил, добавив в код строку с отступом:

Intent intent = new Intent();
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setAction(Intent.ACTION_MAIN);
intent.setPackage(packageName);
-->intent.setComponent(new ComponentName(packageName, className)));
ResolveInfo rInfo = getPackageManager().resolveActivity(intent, 0);

ActivityInfo aInfo = rInfo.activityInfo;

Я извлекла packageName и className из списка запускаемых действий, которые я получил так:

private List<ActivityInfo> applications = new ArrayList<ActivityInfo>();

for(ApplicationInfo info:getPackageManager().getInstalledApplications(0)){
    Intent intent = new Intent();
    intent.addCategory(Intent.CATEGORY_LAUNCHER);
    intent.setAction(Intent.ACTION_MAIN);
    intent.setPackage(info.packageName);
    List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, 0);

    for(ResolveInfo rInfo:list){                
        ActivityInfo activity = rInfo.activityInfo;
        applications.add(activity);
    }
}
...