无法为Android TV构建AppwidgetHost或Appwiget

时间:2018-06-21 12:19:55

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

List<AppWidgetProviderInfo> infos = mAppWidgetManager.getInstalledProviders();
int widgetId = mAppWidgetManager.getAppWidgetIds(infos.get(0).provider)[0];

以上代码将引发以下安全异常

  

java.lang.SecurityException:软件包不属于10069

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

  

ActivityNotFoundException:未找到处理意图的活动{act = android.appwidget.action.APPWIDGET_PICK

再次出现上述异常

仅在Android TV上):

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

更新1: 紧随this之后,仍然会引发相同的异常

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

1 个答案:

答案 0 :(得分:0)

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

Type alpha and b. Space separated float numbers only.
a 0
-29768832.000000 0.000000

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

所以我在应用程序中正在做什么:

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

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