0

两个类ResolveInfoApplicationInfo(扩展PackageItemInfo)都有一个loadLabel方法来“与这个项目关联的当前文本标签”。我尝试运行以下代码,第一个块打印出通过意图查询获得的与 Play Music 应用关联的标签,第二个块打印出通过使用包名称查询获得的与应用关联的标签。第一个打印“播放音乐”,但第二个打印出“Google Play 音乐”。这里发生了什么?

    PackageManager pm = getPackageManager();

    Intent intent = new Intent(Intent.ACTION_MAIN, null);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);
    List<ResolveInfo> activities = pm.queryIntentActivities(intent,
            PackageManager.GET_META_DATA);
    for (ResolveInfo activity : activities) {
        // prints out "Play Music"
        Log.d("butt", "" + activity.loadLabel(pm));
    }

    ApplicationInfo appInfo = null;
    try {
        appInfo = pm.getApplicationInfo("com.google.android.music", 0);
    } catch (NameNotFoundException e) { }
    if (appInfo != null) {
        // prints out "Google Play Music"
        Log.d("butt", "" + appInfo.loadLabel(pm));
    }
4

1 回答 1

1

应用信息文档

您可以检索的有关特定应用程序的信息。这对应于从 AndroidManifest.xml 的标签收集的信息。

ResolveInfo 文档

从针对 IntentFilter 解析意图返回的信息。这部分对应于从 AndroidManifest.xml 的标签收集的信息。

从上面看,Google Play Music 似乎是应用程序的名称,而 Play Music 是应用程序中响应意图的活动的名称。

于 2015-05-02T03:41:46.193 回答