android appwidget不会从活动更新

Jef*_*man 9 android android-appwidget

我有一个简单的appwidget,我想在活动中发生动作时(在同一个应用程序中)更新它.在onUpdate()中,我立即更新小部件,工作正常.在我的活动中,我在appUidget中调用相同的静态更新方法,该方法在onUpdate()中调用以更新视图.小部件未更新.

我可以将代码直接跟踪到AppWidgetManager.updateAppWidget()方法中,这一切都很好,但是小部件不会更新.

我能看到的唯一可能的区别是,当从活动的上下文调用appwidget的onUpdate()方法的上下文时,传递给我的静态更新方法的上下文对象是不同的.但是,网上有很多这样的例子,所以我希望它能够起作用.

dav*_*e.c 20

没有看到你的代码,我不是100%确定你是怎么做的,但是这里是我使用的方法.在我的内容Activity我有以下方法:

private void updateAllWidgets(){
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getApplicationContext());
    int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(this, MyWidget.class));
    if (appWidgetIds.length > 0) {
        new MyWidget().onUpdate(this, appWidgetManager, appWidgetIds);
    }
}
Run Code Online (Sandbox Code Playgroud)

MyWidgetappwidget的类在哪里.我可以在我的任何地方调用此方法Activity来更新我的所有appwidgets.


Nat*_*ann 9

而不是使用静态方法利用窗口小部件已经是广播接收器并在清单中为其注册更新意图的事实.然后,只要你需要从活动中更新它就可以调用

//in your activity
sendBroadcast(new Intent(MyWidget.ACTION_UPDATE).putExtra(whatever));  



//In widget class
public static final String ACTION_UPDATE = "com.example.UPDATE_MY_WIDGET";
Run Code Online (Sandbox Code Playgroud)

并在清单文件的接收器标签内

<intent-filter>
  <action android:name="com.example.UPDATE_MY_WIDGET"/>
</intent-filter>
Run Code Online (Sandbox Code Playgroud)