0

我的问题:
我想使用Intent Category Category.LAUNCHER. 所以我想获取将在启动器中显示的所有应用程序,
然后解析包和名称。
package: "com.android.phone" -- name: "Phone"

我的代码基本上可以工作,但我认为,不,我知道这可以变得更容易:

final PackageManager pm = getPackageManager();
Intent main = new Intent(Intent.ACTION_MAIN, null);
main.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> packages = pm.queryIntentActivities(main, 0);

for (ResolveInfo resolve_info : packages)
{
    try
    {
        //THIS TWO
        String package_name = resolve_info.activityInfo.packageName;
        String app_name = (String)pm.getApplicationLabel(pm.getApplicationInfo(package_name, PackageManager.GET_META_DATA));

        Log.i("TEST", "package = <" + package_name + "> name = <" + app_name + ">");
    }
    catch(Exception e)
    {
        //package not found -- should never happen
    }
}

那么有没有更好/更快或更简单的方法?

4

2 回答 2

1
final PackageManager pm = getActivity().getPackageManager();

final IntentFilter filter = new IntentFilter(Intent.ACTION_MAIN);
filter.addCategory(Intent.CATEGORY_LAUNCHER);

List<IntentFilter> outFilters = new ArrayList<IntentFilter>();
outFilters.add(filter);

List<ComponentName> outActivities = new ArrayList<ComponentName>();
pm.getPreferredActivities(outFilters, outActivities, null);
于 2014-03-28T07:11:47.590 回答
0
    Intent startupIntent = new Intent(Intent.ACTION_MAIN);
    startupIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    PackageManager pm =  this.getPackageManager();
    List<ResolveInfo> activities = pm.queryIntentActivities(startupIntent, 0);
    Log.i(TAG, "Found " + activities.size() + " activities.");

在扩展 AppCompatActivity 或 Activity 的 MainActivity

于 2019-05-29T13:10:12.627 回答