无法为Android TV生成AppwidgetHost或Appwiget 列表以检索用户权限

无法为Android TV生成AppwidgetHost或Appwiget 列表以检索用户权限,android,android-widget,android-appwidget,android-tv,Android,Android Widget,Android Appwidget,Android Tv,ActivityNotFoundException:未找到可处理意图{act=android.appwidget.action.appwidget\u PICK的活动 再次抛出上述异常(仅在android TV上): 然而,同样的代码在移动设备上有效,但在安卓电视上无效,那么我们如何构建安卓电视呢 更新1: 下面的代码仍然抛出相同的异常 更新2: 在Android TV上找到了相同的操作\u APPWIDGET\u拾取和操作\u APPWIDGET\u绑定在AndroidTV中不可用。 允许应用

ActivityNotFoundException:未找到可处理意图{act=android.appwidget.action.appwidget\u PICK的活动

再次抛出上述异常(仅在android TV上)

然而,同样的代码在移动设备上有效,但在安卓电视上无效,那么我们如何构建安卓电视呢

更新1: 下面的代码仍然抛出相同的异常

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

操作\u APPWIDGET\u拾取和操作\u APPWIDGET\u绑定在AndroidTV中不可用。 允许应用程序使用widget的唯一方法是使用adb shell并执行

List<AppWidgetProviderInfo> infos = mAppWidgetManager.getInstalledProviders();
int widgetId = mAppWidgetManager.getAppWidgetIds(infos.get(0).provider)[0];
appwidget grantbind--包--用户0
这是解决方案的一半,您的用户应该有足够的知识来设置adb和运行shell命令

因此,我在应用程序中所做的是:

  • 我正在使用自定义小部件选择器对话框
  • 当用户选择一个小部件时,我会检查动作\应用小部件\绑定是否正确 觉醒的
  • 如果不是,我将尝试使用反射来授予绑定
  • 如果反射不起作用,我将检查是否存在su(根) 可用
  • 如果它不是根目录,我将显示一个对话框,解释如何启用 通过adb手动创建小部件

  • 不是十全十美,但至少有些东西。

    顺便说一句,如果您是系统开发人员,那么您可以创建您的应用程序系统并添加到清单中。
    appwidget grantbind --package <your_package_name> --user 0