как запустить приложение Amazon Amazon Video на Android TV с помощью Intent - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь запустить приложение Amazon Prime for TV (https://play.google.com/store/apps/details?id=com.amazon.amazonvideo.livingroom) из моего собственного приложения для Android TV. К сожалению, PackageManager.getLaunchIntentForPackage() возвращает ноль.

// called inside a Fragment
val intent = activity?.packageManager?.getLaunchIntentForPackage("com.amazon.amazonvideo.livingroom")
startActivity(intent)

при запуске, оноthrows

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.content.Intent.migrateExtraStreamToClipData()' on a null object reference

Конечно, на моем Android TV установлен Amazon Prime для ТВ, а также я могу использовать этот код для успешного запуска других приложений, таких как com.google.android.youtube.tv или com.netflix.ninja

Существует похожий вопрос по этой теме ( как запустить приложение amazon prime video из моего приложения для Android с помощью намерения ), но это не решает мою проблему - решение проблемы OP заключалось в использовании PackageManager(который я уже использую) и com.amazon.avod.thirdpartyclient, так как приложение работало на телефоне / планшете, а не на телевизорене решить мою проблему. На моем Android TV, версия 11.5.09 установлена ​​служба Google Play, в то время как ошибка, вызвавшая проблему с другим вопросом, была (предположительно) исправлена ​​в 9.4.0. В любом случае, принятое решение - это почти отказ от приложения cсыпь, не решая реальную проблему.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Как объяснено в getLaunchIntentForPackage для некоторых приложений имеет значение null , основная причина проблемы заключается в том, что приложения Android TV используют Intent.CATEGORY_LEANBACK_LAUNCHER вместо Intent.CATEGORY_LAUNCHER, в результате чего getLaunchIntentForPackage() возвращает значение NULL.Некоторые телевизионные приложения поддерживают Intent.CATEGORY_LAUNCHER, поэтому проблема не распространяется на каждое приложение.

Я решил использовать решение, упомянутое в комментариях (вместо принятого), поскольку оно прощеи требует меньше кода:

val packageName  = "com.amazon.amazonvideo.livingroom"
val pm = activity?.packageManager
val intent = pm?.getLaunchIntentForPackage(packageName) ?: pm?.getLeanbackLaunchIntentForPackage(packageName)
startActivity(intent)

уведомление getLeanbackLaunchIntentForPackage() используется в качестве резервного механизма.Таким образом, активность будет запущена как на Android TV, так и на телефоне / планшете (учтите, что у телефона / стола и телевизора часто есть отдельные приложения для одной и той же услуги, например com.amazon.avod.thirdpartyclient и com.amazon.amazonvideo.livingroom)

0 голосов
/ 28 февраля 2019

Вы можете открыть намерение следующим образом, оно должно работать, как это работает для меня

Intent i=new Intent(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
            Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
i.setComponent(name);
startActivity(i);`
...