我确定我错过了一些东西,但我只是想用一个按钮和一个计数器来获取一个app小部件。每次我点击按钮,我都希望计数器更新1。
我已经设置了WidgetProvider的onUpdate()函数来向该按钮注册一个待处理事件,以便它启动一个服务来碰撞计数器numbver:
Intent active = new Intent(context, CounterService.class);
active.setAction(CounterService.COUNT);
PendingIntent pending = PendingIntent.getService(context, 0, active, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.CountButton, pending);
ComponentName component = new ComponentName(context.getPackageName(), KickCounterWidgetProvider.class.getName());
appWidgetManager.updateAppWidget(component, views);
然后在服务CounterService :: onStart()函数中我计算了计数(暂时存储在prefs中),然后尝试更新显示当前计数值的文本字段:
// ... bump the count here and store a string representation of it in currentCountString ...
RemoteViews remoteView = new RemoteViews(getApplicationContext().getPackageName(), R.layout.widget);
remoteView.setTextViewText(R.id.CurrentKickCount, currentCountString);
// apply changes to widget
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getApplicationContext());
ComponentName component = new ComponentName(getApplicationContext().getPackageName(), KickCounterWidgetProvider.class.getName());
appWidgetManager.updateAppWidget(component, remoteView);
明智地使用Logcat表示这一切都正常,字符串似乎没问题,但由于某种原因,对appWidgetManager.updateAppWidget()的调用似乎因某种原因而无声地失败。
我不知道它是否相关,但是我第一次将主题小部件的实例添加到主屏幕,甚至按钮都不起作用(即,在提供程序中onUpdate()中对updateAppWidget()的调用失败)。对于调用Provider中的updateAppWidget(),该小部件的后续实例似乎可以正常工作,但从不适用于该服务。
非常感谢任何帮助。
答案 0 :(得分:6)
自: http://code.google.com/p/android/issues/detail?id=8889
将小部件安装到 新鲜擦拭或新创建的AVD, appWidgetManager.updateAppWidget调用 没有更新相应的 小部件。意图是正确的 接到后,电话被呼叫 通常,但没有小部件更新 发生。
如果重新启动AVD(使用或 没有安装小部件的包 在设备上)问题停止了 在第一次非新鲜之后存在 初始化启动。
问题似乎存在于2.0和 2.1,在1.5,1.6和2.2上,它表现得如预期的那样。
答案 1 :(得分:0)
您的一般方法看似合理,但this
可能与getApplicationContext()
一样有效。你的最后一段完整段落表明,其他东西可能会出错。 Here is a somewhat complicated sample project展示了您正在使用的那种模式 - 在这种情况下,随机选择一家餐馆而不是碰撞柜台。