Android: 如何获取正确的应用名称?

Android: How to get the right application name?

目前我已经编写了一个代码来加载所有能够查看来自 phone 图像的应用程序。

public static List<String> getAllCapableForFileViewing (Context context, String mimeType) {
    List<String> packages = new ArrayList<>();
    PackageManager pm = context.getPackageManager();
    Intent sendIntent = new Intent();
    sendIntent.setAction(Intent.ACTION_VIEW);
    sendIntent.setType(mimeType);
    List<ResolveInfo> resolveInfoList = context.getPackageManager()
            .queryIntentActivities(sendIntent, 0);

    for (ResolveInfo resolveInfo : resolveInfoList) {
        packages.add(resolveInfo.activityInfo.packageName);

        System.out.println(resolveInfo.activityInfo.packageName);
        System.out.println(resolveInfo.activityInfo.applicationInfo.className);
        System.out.println(resolveInfo.activityInfo.name);
        System.out.println("");
    }

    return packages;
}

当我试图列出所有应用程序时,其中一个列出了两个应用程序,例如微信,微信朋友圈。显然它有两个活动可以处理图像以供查看。问题是两者的名字是一样的"WeChat"。

另外?即使它可以使用我传入的内容,但它们并不是真正用于查看图像的应用程序,例如图库应用程序。有没有办法识别它们。我知道这可能是不可能的。

The problem is the name of the two are the same "WeChat".

好吧,这最终取决于该应用程序的开发人员。但是,请查看 ResolveInfolabelRes,因为这可能是更好用的标签(例如,从 <intent-filter> 中提取)。

Is there a way to recognise them

欢迎您尝试 using CATEGORY_APP_GALLERY,尽管这可能会导致漏报(即,用户希望显示但实际未显示的应用)。