2011-01-19 82 views
5

我在網上/書上看到一些例如約在App窗口小部件,一個正常的例子來更新窗口小部件是的AppWidgetProvider的onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds)方法是這樣的:兩種方法之間更新Android App Widget有什麼不同?

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);  
} 

它更新一個循環的每個窗口小部件。

但現在,我必須實現一個應用程序窗口小部件,它在廣播接收器,因爲有在沒有通過INT [] appWidgetIds更新,onReceive(Context context, Intent intent)方法所以我實現這樣的代碼:

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); 

它沒有一個一個更新小部件,但實際上所有小部件都一次更新。儘管它按我的意圖工作,但我爲什麼不需要像以前一樣逐一更新所有小部件而感到困惑。

兩種方法有什麼區別?

我可以從BroadcastReceiver.onReceive()發送另一個廣播來觸發AppWidgetProvider.onUpdate()嗎?以及如何?

回答

相關問題