getLaunchIntentForPackage для некоторых приложений имеет значение null

Я создаю сервис, который отправляет список установленных приложений с Android TV или Fire TV на мобильный телефон. Затем телефон отправляет обратно имя пакета приложения, которое он хочет запустить, и служба запускает его.

Это код, который создает список

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

Вот так я запускаю приложения

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

На Fire TV все работает отлично, но на Android TV цель многих приложений всегда нулевая. Это всего лишь несколько.

com.haystack.androidcom.netflix.ninjatv.pluto.androidcom.bamnetworks.mlbtv

Однако с тем же кодом эти приложения работают просто отлично.

com.hulu.livingroompluscom.slingcom.frogmind.badlandcom.songza.tv

Может ли кто-нибудь дать представление о том, что я могу делать неправильно?

Спасибо!

РЕДАКТИРОВАТЬ: Я также попробовал это, и я получаю исключение

android.content.ActivityNotFoundException: не найдено ни одного действия для обработки Intent {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);
}

РЕДАКТИРОВАТЬ 2:

Это код, который работает для меня:

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

Ответы на вопрос(2)

Ваш ответ на вопрос