5.1.1 を実行している Android TV (Nexus Player) で起動可能なすべてのアプリのリストを取得しようとしています。
private static Set<ResolveInfo> getInstalledAppsFrom(PackageManager packageManager) {
Set<ResolveInfo> activities = new HashSet<>();
activities.addAll(launcherActivitiesIn(packageManager));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
activities.addAll(leanbackActivitiesIn(packageManager));
}
return activities;
}
private static List<ResolveInfo> launcherActivitiesIn(PackageManager packageManager) {
Intent intent = new Intent()
.setAction(Intent.ACTION_MAIN)
.addCategory(Intent.CATEGORY_LAUNCHER);
return getResolveInfos(packageManager, intent);
}
private static List<ResolveInfo> getResolveInfos(PackageManager packageManager, Intent intent) {
return packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private static List<ResolveInfo> leanbackActivitiesIn(PackageManager packageManager) {
Intent intent = new Intent()
.setAction(Intent.ACTION_MAIN)
.addCategory(Intent.CATEGORY_LEANBACK_LAUNCHER);
return getResolveInfos(packageManager, intent);
}
上記を使用して、アプリのリストを取得できますが、完全なリストのようには見えません: Netflix はデバイスにインストールされていますが、表示されず、明らかに [設定] がありません。
5.1.1 を実行している Android フォンで同じコードを実行すると、設定アプリが含まれます。
一部のアプリの表示を妨げる可能性のあるCATEGORY_LAUNCHER
and/orについて何かありますか?CATEGORY_LEANBACK_LAUNCHER
私も試しました:
packageManager.getInstalledApplications(PackageManager.PERMISSION_GRANTED);
同じ効果があります。
完全なコード (この質問を書いている時点) は、Github here でチェックアウトできます。スニペットはAppsRepository クラスからのものです。