Câu trả lời:
Nếu bạn đang sử dụng AppWidgetProvider
, bạn có thể cập nhật nó theo cách này:
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);
Điều này hữu ích khi tôi tìm kiếm cách cập nhật tiện ích con từ một dịch vụ / hoặc hành động (nhưng có thể có từ mọi Ngữ cảnh):
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);
Vì vậy, để cập nhật tiện ích con từ một hoạt động, bạn có thể làm như sau:
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);
Làm việc cho tôi :)
Thử cái này:
int[] ids = AppWidgetManager.getInstance(getApplication()).getAppWidgetIds(new ComponentName(getApplication(), MyWidget.class));
MyWidget myWidget = new MyWidget();
myWidget.onUpdate(this, AppWidgetManager.getInstance(this),ids);
Trong trường hợp bạn đang làm việc với một tiện ích con sử dụng một bộ sưu tập như ListView, GridView hoặc StackView, để cập nhật các mục của tiện ích con, hãy làm như sau:
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);
Với phương thức này, InformAppWidgetViewDataChanged (), bạn có thể buộc các mục widget tìm nạp bất kỳ dữ liệu mới nào trong thời gian thực.
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()
nó có một mảng.
Giải pháp được chấp nhận của Phaethon ở 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)
Nơi MyAppWidgetProvider được lấy từ AppWidgetProvider:
class MyAppWidgetProvider : AppWidgetProvider() {
Nếu bạn đang cố gắng cập nhật tiện ích theo chương trình mà bạn không có quyền truy cập vào YourWidgetProvider.class một cách rõ ràng, chẳng hạn như từ một mô-đun hoặc thư viện khác, bạn có thể nắm bắt những gì YourWidgetProvider.class.getName () xuất ra và tạo một hằng số:
val WIDGET_CLASS_NAME = "com.example.yourapplication.YourWidgetProvider"
Sau đó, bạn sẽ có thể sử dụng điều này một cách ngầm định:
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
đâu?