Jawaban:
Jika Anda sedang menggunakan AppWidgetProvider
, Anda dapat memperbaruinya dengan cara ini:
Intent intent = new Intent(this, MyAppWidgetProvider.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
// Use an array and EXTRA_APPWIDGET_IDS instead of AppWidgetManager.EXTRA_APPWIDGET_ID,
// since it seems the onUpdate() is only fired on that:
int[] ids = AppWidgetManager.getInstance(getApplication())
.getAppWidgetIds(new ComponentName(getApplication(), MyAppWidgetProvider.class));
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids);
sendBroadcast(intent);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
Ini membantu ketika saya mencari tentang cara memperbarui widget dari layanan / atau tindakan (tetapi mungkin dari setiap Konteks):
Context context = this;
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_2x1);
ComponentName thisWidget = new ComponentName(context, MyWidget.class);
remoteViews.setTextViewText(R.id.my_text_view, "myText" + System.currentTimeMillis());
appWidgetManager.updateAppWidget(thisWidget, remoteViews);
Jadi untuk memperbarui widget dari suatu aktivitas, Anda dapat melakukannya seperti ini:
Intent intent = new Intent(this, DppWidget.class);
intent.setAction("android.appwidget.action.APPWIDGET_UPDATE");
int ids[] = AppWidgetManager.getInstance(getApplication()).getAppWidgetIds(new ComponentName(getApplication(), DppWidget.class));
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,ids);
sendBroadcast(intent);
Bekerja untuk saya :)
Coba ini:
int[] ids = AppWidgetManager.getInstance(getApplication()).getAppWidgetIds(new ComponentName(getApplication(), MyWidget.class));
MyWidget myWidget = new MyWidget();
myWidget.onUpdate(this, AppWidgetManager.getInstance(this),ids);
Jika Anda bekerja dengan widget yang menggunakan koleksi seperti ListView, GridView, atau StackView, untuk memperbarui item widget, lakukan hal berikut:
Context context = getApplicationContext();
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
ComponentName thisWidget = new ComponentName(context, StackWidgetProvider.class);
int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds, R.id.stack_view);
Dengan metode notifyAppWidgetViewDataChanged () ini, Anda bisa memaksa item widget untuk mengambil data baru apa pun secara real time.
int widgetIDs[] = AppWidgetManager.getInstance(getApplication()).getAppWidgetIds(new ComponentName(getApplication(), WidgetProvider.class));
for (int id : widgetIDs)
AppWidgetManager.getInstance(getApplication()).notifyAppWidgetViewDataChanged(id, R.id.widget_view);
}
notifyAppWidgetViewDataChanged()
yang membutuhkan array.
Solusi yang diterima Phaethon di Kotlin:
val intent = Intent(this, MyAppWidgetProvider::class.java)
intent.action = AppWidgetManager.ACTION_APPWIDGET_UPDATE
val ids = AppWidgetManager.getInstance(application).getAppWidgetIds(ComponentName(getApplicationContext(),MyAppWidgetProvider::class.java!!))
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids)
sendBroadcast(intent)
Di mana MyAppWidgetProvider berasal dari AppWidgetProvider:
class MyAppWidgetProvider : AppWidgetProvider() {
Jika Anda mencoba memperbarui widget secara terprogram di mana Anda tidak memiliki akses ke YourWidgetProvider.class secara eksplisit, misalnya dari modul atau pustaka lain, Anda dapat menangkap apa yang dihasilkan YourWidgetProvider.class.getName () dan membuat konstanta:
val WIDGET_CLASS_NAME = "com.example.yourapplication.YourWidgetProvider"
Anda kemudian akan dapat menggunakan ini secara implisit:
val intent = Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE)
val widgetManager = AppWidgetManager.getInstance(context)
val ids = widgetManager.getAppWidgetIds(ComponentName(context, WIDGET_CLASS_NAME))
AppWidgetManager.getInstance(context).notifyAppWidgetViewDataChanged(ids, android.R.id.list)
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids)
context.sendBroadcast(intent)
widgetId
?