尝试应用程序跳转到 Google TV 上的“预装”“云”应用程序时出错

问题描述 投票:0回答:1

我有一个工作设置,可以将应用程序跳转(

context.startActivty(intent)
)到其他应用程序。如果应用程序未安装,这将失败,因此我们使用下面的代码来检查它。但是,在 Google TV 上,当可以使用“
AMATI_EXPERIENCE
”安装应用程序时,此代码将失败!

App ready to be downloaded on Google TV

有谁知道如何在代码中检测应用程序是否未像 Google TV 上那样安装?

    fun isPackageInstalled(context: Context, packageName: String): Boolean =
        packageInfo(context, packageName) != null

    fun packageInfo(context: Context, packageName: String): PackageInfo? {
        return try {
            context.packageManager.getPackageInfo(packageName, 0)
        } catch (e: PackageManager.NameNotFoundException) {
            null
        }
    }

启动 Viaplay 活动时抛出异常

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=https://viaplay.no/... flg=0x10000000 pkg=com.viaplay.android }
    at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2239)
    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1878)
    at android.app.ContextImpl.startActivity(ContextImpl.java:1132)
    at android.app.ContextImpl.startActivity(ContextImpl.java:1103)
    at android.content.ContextWrapper.startActivity(ContextWrapper.java:436)
    ...
android kotlin android-package-managers google-tv
1个回答
0
投票

我在

PackageManager
上找到了一个替代调用,它触发了应用程序下载,所以它至少不会崩溃:

context.packageManager.getLaunchIntentForPackage(packageName)

结合支票,会是这样的

    fun isPackageInstalled(context: Context, packageName: String): Boolean =
        packageInfo(context, packageName) != null && 
        context.packageManager.getLaunchIntentForPackage(packageName) != null

注意:在 Amazon Prime 上测试该功能不起作用,但使用

getLeanbackLaunchIntentForPackage("com.amazon.amazonvideo.livingroom")
却可以。

© www.soinside.com 2019 - 2024. All rights reserved.