現在、私は電話から画像を見ることができるすべての有能なアプリケーションをロードするコードを書いています。Android:正しいアプリケーション名を取得するには?
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;
}
すべてのアプリケーションを一覧表示しようとすると、そのうちの1つに2つのセットがリストされています。 WeChat、WeChatモーメント。明らかに、画像を表示するための2つのアクティビティがあります。問題は2つの名前が同じ "WeChat"です。
さらに、たとえそれが渡されたコンテンツを消費することができるが、実際には画像を見るためのアプリケーションではない。ギャラリーアプリケーション。それらを認識する方法はありますか?私はそれが不可能かもしれないことを知っている。
loadLabelメソッドとlabelResの違いは何ですか? – LittleFunny
@LittleFunny:[この 'loadLabel()'](https://developer.android.com/reference/android/content/pm/ResolveInfo.html# loadLabel(android.content.pm.PackageManager))、 'ResolveInfo'で' labelRes'を使うべきです。しかし、 'ResolveInfo'の' loadLabel() 'は、' ActivityInfo'や 'ApplicationInfo'の' loadLabel() 'よりも集中した結果を与えるかもしれません。 – CommonsWare
さて、私はResolveInfoでloadLabelをテストしました。これはlabelResと同じ結果を返しました。最後の質問は、ResolveInfoとActivityInfoとApplicationInfoとの関係です。 ActivityInfo =アクティビティレベル、ApplicationInfo =アプリケーションレベル。 – LittleFunny