2011-01-19 13 views
5

मैंने ऐप विजेट के बारे में इंटरनेट/पुस्तक में कुछ उदाहरण पढ़ा है, विजेट को अपडेट करने के लिए एक सामान्य उदाहरण AppWidgetProvider की onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) विधि में है:दो दृष्टिकोण के बीच एंड्रॉइड ऐप विजेट अपडेट करने में क्या अंतर है?

final int N = appWidgetIds.length; 
for (int i=0; i<N; i++) { 
int appWidgetId = appWidgetIds[i]; 
RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.mywidget_layout); 
updateViews.setTextViewText(R.id.mytext, "updated text"); 

appWidgetManager.updateAppWidget(appWidgetId, updateViews);  
} 

यह प्रत्येक विजेट को लूप में अपडेट करता है।

लेकिन अब, मुझे एक ऐप विजेट लागू करना है, इसे ब्रॉडकास्ट रिसीवर, onReceive(Context context, Intent intent) विधि में अपडेट किया गया है क्योंकि कोई int [] appWidgetIds पास नहीं हुआ है। इसलिए मैंने इस तरह कोड लागू किया:

RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.mywidget_layout); 
updateViews.setTextViewText(R.id.mytext, "updated text"); 

ComponentName myComponentName = new ComponentName(context, AndroidBatteryWidgetProvider.class); 
AppWidgetManager manager = AppWidgetManager.getInstance(context); 
manager.updateAppWidget(myComponentName, updateViews); 

यह विजेट को एक-एक करके अद्यतन नहीं किया, लेकिन वास्तव में सभी विजेट एक बार में अपडेट किए गए थे। भले ही यह काम करता है जैसा कि मैं चाहता हूं, लेकिन मुझे उलझन में आया कि क्यों सभी विजेट्स को एक-एक करके पहले अपडेट करने की आवश्यकता नहीं है।

दो तरीकों के बीच क्या अंतर है?

क्या मैं AppWidgetProvider.onUpdate() से AppWidgetProvider.onUpdate() को ट्रिगर करने के लिए एक और प्रसारण भेज सकता हूं? और कैसे करें?

उत्तर

0

यह वही बात है। अपने पहले कोड ब्लॉक जैसे सभी आईडी के माध्यम से ComponentName loops के साथ अपडेट करें।

आप यहाँ एंड्रॉयड कोड में देख सकते हैं:

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r1.2/com/android/server/AppWidgetService.java#AppWidgetService.updateAppWidgetProvider%28android.content.ComponentName%2Candroid.widget.RemoteViews%29