getLaunchIntentForPackage ist für einige Apps null

Ich erstelle einen Dienst, der eine Liste installierter Apps von einem Android-Fernseher oder einem Fire-Fernseher an ein Mobiltelefon sendet. Das Telefon sendet dann den Paketnamen der zu startenden App zurück und der Dienst startet ihn.

Dies ist der Code, der die Liste erstellt

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;
}

So starte ich die Apps

public void launchApp(String packageName) {
    PackageManager pm = getPackageManager();
    Intent intent = pm.getLaunchIntentForPackage(packageName);
    startActivity(intent);
}

Auf dem Fire TV funktioniert alles perfekt, aber auf dem Android TV ist die Absicht für viele Apps immer null. Das sind nur ein paar.

com.haystack.android com.netflix.ninja tv.pluto.android com.bamnetworks.mlbtv

Jedoch mit dem gleichen Code funktionieren diese Apps einwandfrei.

com.hulu.livingroomplus com.sling com.frogmind.badland com.songza.tv

Kann jemand einen Einblick geben, was ich möglicherweise falsch mache?

Vielen Dank

BEARBEITEN Ich habe es auch versucht und ich bekomme die Ausnahme

android.content.ActivityNotFoundException: Es wurde keine Aktivität gefunden, die Intent behandelt {cat = [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);
}

EDIT 2:

Dies ist der Code, der für mich funktioniert:

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);
    }
}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage