我正在尝试从自己的Android TV应用程序中启动Amazon Prime for TV应用程序(https://play.google.com/store/apps/details?id=com.amazon.amazonvideo.livingroom)。不幸的是,PackageManager.getLaunchIntentForPackage()
返回null。
// called inside a Fragment
val intent = activity?.packageManager?.getLaunchIntentForPackage("com.amazon.amazonvideo.livingroom")
startActivity(intent)
跑步时会抛出
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.content.Intent.migrateExtraStreamToClipData()' on a null object reference
当然,我的Android TV上确实安装了Amazon Prime for TV。另外,我可以使用此代码成功启动其他应用,例如com.google.android.youtube.tv
或com.netflix.ninja
关于此主题(how launch amazon prime video app from within my android app using intent)有一个类似的问题,但这并不能解决我的问题-解决OP问题的方法是使用PackageManager
(我已经在使用)和{{ 1}},因为该应用程序在手机/平板电脑而不是电视上运行
编辑:Intent.migrateExtraStreamToClipData() on a null object reference不能解决我的问题。我在11.5.09版的Android TV上安装了Google Play服务,而引起另一个问题的错误已(可能)已在9.4.0中修复。无论如何,公认的解决方案只是避免应用崩溃,而不是解决实际问题。
答案 0 :(得分:0)
您可以在 按照这种方式,它应该可以工作,因为它对我有用
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);`
答案 1 :(得分:0)
如getLaunchIntentForPackage is null for some apps中所述,此问题的根本原因是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
)