强制Android小部件进行更新

我在接收方法中按下我的appwidgetbutton。 当我按下button时,我想迫使小部件调用onupdate方法。 我如何做到这一点?

提前致谢!

    小部件实际上无法响应点击,因为它不是一个单独的进程运行。 但它可以启动服务来处理您的命令:

    public class TestWidget extends AppWidgetProvider { public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { final int N = appWidgetIds.length; // Perform this loop procedure for each App Widget that belongs to this provider for (int i=0; i<N; i++) { int appWidgetId = appWidgetIds[i]; // Create an Intent to launch UpdateService Intent intent = new Intent(context, UpdateService.class); PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0); // Get the layout for the App Widget and attach an on-click listener to the button RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_provider_layout); views.setOnClickPendingIntent(R.id.button, pendingIntent); // Tell the AppWidgetManager to perform an update on the current App Widget appWidgetManager.updateAppWidget(appWidgetId, views); } } public static class UpdateService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startId) { //process your click here return START_NOT_STICKY; } } } 

    您还应该在清单文件中注册新的服务:

     <service android:name="com.xxx.yyy.TestWidget$UpdateService"> 

    您可以在SDK中的Wiktionary示例中find另一个UpdateService实现的示例

    这是另一个很好的方法Android中的可点击小部件

    这有点粗糙,但对我来说效果不错,因为我没有find直接实施的方法来强制更新。

     public class Foo extends AppWidgetManager { public static Foo Widget = null; public static Context context; public static AppWidgetManager AWM; public static int IDs[]; public void onUpdate(Context context, AppWidgetManager AWM, int IDs[]) { if (null == context) context = Foo.context; if (null == AWM) AWM = Foo.AWM; if (null == IDs) IDs = Foo.IDs; Foo.Widget = this; Foo.context = context; Foo.AWM = AWM; Foo.IDs = IDs; ....... } } 

    现在,我想强制更新小部件的任何地方,就像下面这样简单:

     if (null != Foo.Widget) Foo.Widget.onUpdate(null, null, null);