我创建了一个 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 的模拟器,所以谁知道......