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 意图的主要内容,如果未能解决你的问题,请参考以下文章

ListView 未在 App Widget 中显示数据

在小部件中单击按钮后服务未启动

启动配置活动时调用Widget onUpdate

当小部件具有配置活动时,无法从小部件启动活动

为收到的每个广播创建一个新的 MyAppWidgetProvider 实例?

如何使用服务来监控 Android 中的方向变化