目前我已经编写了一个代码来加载所有可以通过手机查看图像的功能强大的应用程序。
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;
}
当我尝试列出所有应用程序时,其中一个应用程序列出了两个微信,微信时刻。显然它有两个活动可以处理图像以供查看。问题是两者的名称相同&#34;微信&#34;。
此外?即使它可以消耗我传入的内容,但它们实际上不是用于查看图像的应用程序,例如图库应用。有没有办法识别它们。我知道这可能是不可能的。
答案 0 :(得分:1)
问题是两者的名称相同&#34;微信&#34;。
嗯,最后,这取决于该应用的开发者。不过,请查看labelRes
的{{1}},因为这可能是一个更好的标签(例如,从ResolveInfo
中提取)。
有没有办法识别它们
欢迎您尝试使用using CATEGORY_APP_GALLERY
,但这可能会导致漏报(即,用户希望显示的应用不会出现这种情况)。