Bir Android TV'den veya Fire TV'den bir cep telefonuna yüklü uygulamaların bir listesini gönderen bir hizmet yapıyorum. Telefon daha sonra başlatmak istediği uygulamanın paket adını geri gönderir ve hizmet başlatır. Bazı uygulamalar için getLaunchIntentForPackage boştur
Bu
public List<InstalledApp> GetInstalledApps(boolean isAndroid) {
PackageManager pm = getPackageManager();
List<ApplicationInfo> allPackages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
List<InstalledApp> userPackages = new ArrayList<InstalledApp>();
for (ApplicationInfo packageInfo : allPackages) {
if (isSystemPackage(packageInfo)) continue;
InstalledApp app = new InstalledApp();
app.setPackageName(packageInfo.packageName);
app.setAppName(pm.getApplicationLabel(packageInfo).toString());
if (!isAndroid) {
app.setIcon(pm.getApplicationIcon(packageInfo));
}
app.setAccentColor(getAccentColor(pm.getApplicationIcon(packageInfo)));
userPackages.add(app);
}
return userPackages;
}
Bu benim Yangın TV herşey üzerinde
public void launchApp(String packageName) {
PackageManager pm = getPackageManager();
Intent intent = pm.getLaunchIntentForPackage(packageName);
startActivity(intent);
}
birçoğu için mükemmel ama Android TV'de niyet çalışır uygulamaları başlatmak nasıl listesini oluşturur koddur uygulamalar her zaman boş. Bunlar sadece birkaçı.
- com.netflix.ninja
- aynı kodla Ancak
- com.bamnetworks.mlbtv
tv.pluto.android com.haystack.android, bu uygulamalar çalışmaları sadece iyi.
- com.hulu.livingroomplus
- com.songza.tv
- com.frogmind.badland
- com.sling
Herkes ben yapıyor olabilir ne herhangi bir fikir verebilir misiniz yanlış?
Teşekkürler!
DÜZENLEME: Ben de bu denedim ve istisna
android.content.ActivityNotFoundException olsun: Etkinlik Yok Niyet {işlemek için bulunan kedi = [android.intent.category.LEANBACK_LAUNCHER] flg = 0x10000000 pkg = com.netflix.ninja}
public void launchApp(String packageName) {
Intent intent = new Intent();
intent.setPackage(packageName);
intent.addCategory("android.intent.category.LEANBACK_LAUNCHER");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
DÜZENLEME 2:
Bu benim için çalışıyor koddur :
public void launchApp(String packageName) {
Intent intent = new Intent();
intent.setPackage(packageName);
PackageManager pm = getPackageManager();
List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent, 0);
Collections.sort(resolveInfos, new ResolveInfo.DisplayNameComparator(pm));
if(resolveInfos.size() > 0) {
ResolveInfo launchable = resolveInfos.get(0);
ActivityInfo activity = launchable.activityInfo;
ComponentName name=new ComponentName(activity.applicationInfo.packageName,
activity.name);
Intent i=new Intent(Intent.ACTION_MAIN);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
i.setComponent(name);
startActivity(i);
}
}
Ayı Android TV'de,' LEANBACK_LAUNCHER' başlatıcısı için kategorisidir akılda. Benim tahminim bu uygulamaların bir "LAUNCHER" aktivitesine sahip olmaması ve 'getLaunchIntentForPackage()' ın sadece LEANBACK_LAUNCHER değil, "LAUNCHER" için çalıştığıdır. – CommonsWare
Amaç için paket adını manuel olarak ayarlamayı ve 'android.intent.category.LEANBACK_LAUNCHER' kategorisini eklemeyi denedim, ancak yine de çalışmıyor. Netflix'in bir “LEANBACK_LAUNCHER” ürününe sahip olduğundan emin olduğumu biliyorum. Bu önemliyse, SDK'nın 17-21 sürümlerini hedefliyorum. –
"Amaç için paket adını ayarlamayı denedim ve android.intent.category.LEANBACK_LAUNCHER kategorisini eklemeye çalıştım ama yine de çalışmıyor" - Mevcut kodunuzun bağlamında ne demek istediğini bilmiyorum . Tüm "LEANBACK_LAUNCHER" etkinliklerini bulmak için 'queryIntentActivities()' i kullanmaya davetlisiniz. Bu ("LAUNCHER" ile de olsa), ana ekranların yaptığı şeydir, "getLaunchIntentForPackage()') kullanılmaz. İşte bir örnek ev ekranı tarzı başlatıcısı: https://github.com/commonsguy/cw-omnibus/tree/master/Introspection/Launchalot – CommonsWare