onUpdate 未在小部件中调用,即使我在 onreceive 中看到 android.appwidget.action.APPWIDGET_UPDATE 意图
Posted
技术标签:
【中文标题】onUpdate 未在小部件中调用,即使我在 onreceive 中看到 android.appwidget.action.APPWIDGET_UPDATE 意图【英文标题】:onUpdate not being called in widget, even though I see the android.appwidget.action.APPWIDGET_UPDATE intent in onreceive 【发布时间】:2011-03-15 16:19:37 【问题描述】:我正在使用调试器与模拟器一起工作,我注意到 onUpdate()
没有被调用。当我将小部件添加到模拟器主屏幕时,我看到我的断点在 onReceive 方法中被命中。 onReceive()
方法确实获得了 android.appwidget.action.APPWIDGET_UPDATE
意图。但是,onUpdate()
方法永远不会被调用。我相信它的定义是正确的。
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds)
// code that sets up remove view and updates appWidgetManager
【问题讨论】:
【参考方案1】:在onReceive()中调用超类方法
@Override
public void onReceive(Context context, Intent intent)
// Chain up to the super class so the onEnabled, etc callbacks get dispatched
super.onReceive(context, intent);
// Handle a different Intent
Log.d(TAG, "onReceive()" + intent.getAction());
如果您在子类 AppWidgetProvider 中覆盖 onReceive(),则除非您调用超类,否则不会触发提供程序的 onEnabled、onUpdate 等回调。
【讨论】:
【参考方案2】:您是否为小部件设置了配置活动?因为如果你这样做了,则不会调用 onUpdate 并且第一次手动更新小部件是配置活动的工作。之后应该按照 updatePeriod 配置中的定义调用 onUpdate。
【讨论】:
是的,我也读过,但在这种情况下,我没有使用配置活动,也没有指定【参考方案3】:Android Manifest 中有这个吗?
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
【讨论】:
【参考方案4】:仅当您将 AppWidgetManager.EXTRA_APPWIDGET_IDS 额外设置为 appWidgetIds 数组时,onReceive 才会调用 onUpdate,即
// Set the update intent for when the sync button is clicked.
Intent syncIntent = new Intent(context,Widget.class);
syncIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
syncIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds); // onUpdate is only called when AppWidgetManager.EXTRA_APPWIDGET_IDS is set to a non empty array.
PendingIntent syncPendingIntent = PendingIntent.getBroadcast(context,1, syncIntent,0);
rv.setOnClickPendingIntent(R.id.updateWidgetImageButton, syncPendingIntent);
【讨论】:
以上是关于onUpdate 未在小部件中调用,即使我在 onreceive 中看到 android.appwidget.action.APPWIDGET_UPDATE 意图的主要内容,如果未能解决你的问题,请参考以下文章