1

我创建了一个 WidgetProvider 和一个在系统 TIME_TICK 上触发的服务 - 该部分工作正常,日志消息显示服务工作正常,并且在实际手机上看起来很棒。

要更新我的小部件,我使用这样的代码(为清楚起见进行了编辑,因此可能有错字)

    Log.d("xxx","Updating");
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);
    views.setTextViewText(R.id.appwidget_text, "Some Text" + System.currentTimeMillis());
    ComponentName thisWidget = new ComponentName(context, SWClockWidgetProvider.class);
    AppWidgetManager manager = AppWidgetManager.getInstance(context);
    manager.updateAppWidget(thisWidget, views);

在我的手机(运行 2.2 的 HTC Desire)上,它非常完美,小部件每分钟都会更新。

在模拟器上(运行 2.2)出现日志消息(例如服务正在运行),但小部件没有更新。

现在我在 2 个地方调用该代码 - 来自 Provider 的 onUpdate 方法(以便在首次显示时将某些内容放入 Widget)和来自 Service 的侦听器(以更新它们)

现在这是奇怪的一点 - 在我的清单中,我最初是这样声明我的服务的

服务 android:name=".SWClockWidgetService"

当我将其更改为明确提及包时(当然与提供者的包相同)

服务 android:name="com.somewhatdog.swclockwidget.SWClockWidgetService"

初始更新(从提供者 onUpdate 调用)有效,但来自服务侦听器的后续调用仍然无效!?

注意:最初我将服务设置为提供程序的内部类,但这在手机或模拟器上不起作用 - 不知道这是否相关......

无论如何-我很困惑-手机和模拟器上的相同Android-一个有效,一个无效(这意味着在其他设备上工作的可能性至少可以说是喜怒无常??)

我在这里有点迷失了-任何建议都可以。

ps 我已经在运行 1.6 的模拟器上测试了这个,没有乐趣 - 它适用于运行 2.1r1 和 2.3.3 的模拟器,所以谁知道......

4

2 回答 2

1

模拟器小部件更新似乎有点狡猾。它有两个已知问题:

  1. updateAppWidget(...)调用只能在至少重新启动一次的模拟器上工作
  2. 一次运行多个模拟器可能会干扰小部件更新
于 2012-06-26T11:15:09.010 回答
0

更多的实验表明,模拟器中的小部件更新只是被破坏了。

即使您部署了新代码,现有的 Widget 也保持不变!

使用 Androidx86 进行测试表明问题仅限于模拟器 - 所以我想我会用它来进行小部件测试......

于 2011-10-06T15:58:50.430 回答