जवाबों:
यदि आप एक का उपयोग कर रहे हैंAppWidgetProvider
, तो आप इसे इस तरह से अपडेट कर सकते हैं:
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);
जब मैंने किसी सेवा / या क्रिया से विजेट को अपडेट करने का तरीका खोजा तो यह मदद मिली (लेकिन हर संदर्भ से संभव हो सकती है):
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);
तो किसी गतिविधि से विजेट अपडेट करने के लिए, आप इसे इस तरह से कर सकते हैं:
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);
मेरे लिये कार्य करता है :)
इसे इस्तेमाल करे:
int[] ids = AppWidgetManager.getInstance(getApplication()).getAppWidgetIds(new ComponentName(getApplication(), MyWidget.class));
MyWidget myWidget = new MyWidget();
myWidget.onUpdate(this, AppWidgetManager.getInstance(this),ids);
यदि आप एक विजेट के साथ काम कर रहे हैं, जो विजेट के आइटम को अपडेट करने के लिए ListView, GridView या StackView जैसे संग्रह का उपयोग करता है, तो निम्नानुसार करें:
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);
इस विधि से InformAppWidgetViewDataChanged (), आप विजेट आइटम्स को वास्तविक समय में किसी भी नए डेटा को लाने के लिए मजबूर कर सकते हैं।
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()
जो एक सरणी लेता है।
कोथलिन में फेथॉन का स्वीकृत समाधान:
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)
जहां MyAppWidgetProvider AppWidgetProvider से लिया गया है:
class MyAppWidgetProvider : AppWidgetProvider() {
यदि आप प्रोग्राम को उस विजेट को अपडेट करने का प्रयास कर रहे हैं, जहां आपके पास YourWidgetProvider.class तक पहुंच नहीं है, उदाहरण के लिए, किसी अन्य मॉड्यूल या लाइब्रेरी से, आप YourWidgetProvider.class.getName () आउटपुट को कैप्चर कर सकते हैं और एक स्थिरांक बना सकते हैं:
val WIDGET_CLASS_NAME = "com.example.yourapplication.YourWidgetProvider"
आप तब इस का उपयोग करने में सक्षम होंगे:
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
?