【问题标题】:Unable to build AppwidgetHost or Appwiget for Android TV无法为 Android TV 构建 AppwidgetHost 或 Appwiget
【发布时间】:2018-06-21 12:19:55
【问题描述】:
List<AppWidgetProviderInfo> infos = mAppWidgetManager.getInstalledProviders();
int widgetId = mAppWidgetManager.getAppWidgetIds(infos.get(0).provider)[0];

上面的代码抛出了下面的安全异常

java.lang.SecurityException: 包不属于 10069

或者,如果我使用操作 ACTION_APPWIDGET_BIND 启动 appwidgetpicker 来检索用户权限,

ActivityNotFoundException: 未找到处理 Intent { act=android.appwidget.action.APPWIDGET_PICK

的 Activity

再次抛出上述异常(仅在安卓电视上):

但是,相同的代码在移动设备上有效,但在 Android TV 上无效,那么我们如何为 Android TV 构建 appwidgethost

更新 1: 关注this 也会抛出同样的异常

更新 2: 在 Android TV 上找到 bug 的相同

【问题讨论】:

    标签: android android-widget android-appwidget android-tv


    【解决方案1】:

    ACTION_APPWIDGET_PICK 和 ACTION_APPWIDGET_BIND 在 AndroidTV 中不可用。 让您的应用使用小部件的唯一方法是使用 adb shell 并执行

    appwidget grantbind --package <your_package_name> --user 0
    

    这是一半的解决方案,您的用户应该有足够的知识来设置 adb 和运行 shell 命令。

    那么我在我的应用程序中做了什么:

    1. 我正在使用自定义小部件选择器对话框。
    2. 当用户选择一个小部件时,我会检查 ACTION_APPWIDGET_BIND 是否为 可用
    3. 如果不是,我会尝试使用反射来授予绑定
    4. 如果反射不起作用,我正在检查是否有 su (root) 可用
    5. 如果它没有植根,我将显示一个对话框,解释如何启用 通过 adb 手动添加小部件。

    不是不完美,但至少是一些东西。

    【讨论】:

    • 顺便说一句,如果您是系统开发人员,那么您可以制作您的应用程序系统并将 添加到清单中。
    猜你喜欢
    • 1970-01-01
    • 2021-12-26
    • 2017-01-10
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 2014-08-05
    相关资源
    最近更新 更多