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 に答える