我有一个小部件,它的设置使得当我点击它时,它会在一个 Activity 中打开一些设置。
views.setOnClickPendingIntent(R.id.btnActivate, pendingIntent);
这为应用程序配置了一些设置。我想要实现的是让小部件更新其 View 以在我启动的 Activity 关闭时反射(reflect)更改的设置。使用更新间隔或任何其他类型的轮询对此不合适。
我在这里和 android 文档中看到了几个地方,这段代码使用了:
appWidgetManager.updateAppWidget(mAppWidgetId, views);
但是我不知道如何获取mAppWidgetId 值。我尝试按照此处的小部件配置 Activity 示例 http://developer.android.com/guide/topics/appwidgets/index.html ,但在下面的代码中,
Intent intent = getIntent();
Bundle extras = intent.getExtras();
if (extras != null) {
mAppWidgetId = extras.getInt(
AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
}
extras 始终为 null,因此我从未获得 AppWidgetID。
好吧,现在我只是漫无边际。你觉得我能做什么?
最佳答案
我终于找到了我要找的答案,它在 updateAppWidget 函数的重载中。
appWidgetManager.updateAppWidget(new ComponentName(this.getPackageName(), Widget.class.getName()), views);
这让我无需知道 appWidgetID 即可访问小部件。我在 Activity 中的最终代码是:
// Create an Intent to launch ExampleActivity
Intent intent = new Intent(this, Settings.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
views.setOnClickPendingIntent(R.id.btnActivate, pendingIntent);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
appWidgetManager.updateAppWidget(new ComponentName(this.getPackageName(), Widget.class.getName()), views);
finish();
我必须执行与在 Widget 的 onUpdate 方法中必须执行的所有设置相同的操作,但现在每次我退出 Activity 时,Widget 都会显示正确的状态。
关于android - 从 Activity 更新 Android 小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4073907/