我的Android 4.1.1中的AppWidget有一個非常奇怪的問題。我目前正在開發音樂播放器應用程序及其小部件。 Widget必須在歌曲改變時更新,播放器開始和停止。它有一個ListView,它必須與應用程序中的播放列表同步。Android爲AppWidget設置了不同的佈局
之前果凍豆一切工作正常。在我的測試設備從4.0.3升級到4.1.1之後,無論何時通過程序強制更新小部件,Android的消息部件佈局都會設置爲我的小部件幾秒鐘!我也在4.1中用模擬器檢查過這種情況,它工作正常。
我使用這段代碼,迫使我的小工具來更新:
AppWidgetManager man = AppWidgetManager.getInstance(applicationContext);
int[] ids = man.getAppWidgetIds(
new ComponentName(applicationContext, MuzikLargeWidgetProvider.class));
Intent updateIntent = new Intent();
updateIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids);
applicationContext.sendBroadcast(updateIntent);
這裏是我的onUpdate方法
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
this.context = context;
this.appWidgetManager = appWidgetManager;
ComponentName thisWidget = new ComponentName(context,
MuzikLargeWidgetProvider.class);
int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
for (int appWidgetId : allWidgetIds) {
Intent svcIntent = new Intent(context, UpdateService.class);
svcIntent.putExtra(WidgetActions.DATA_WIDGET_ID, appWidgetId);
context.startService(svcIntent);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
我使用的服務(UpdateService),這是一種靜態內部類,以更新我的部件:
public static class UpdateService extends IntentService {
public UpdateService() {
super("UpdateService");
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
public RemoteViews buildUpdate(Context context, int widgetId) {
final RemoteViews views = new RemoteViews(context.getPackageName(),
R.layout.muzikwidget_large);
return views;
}
@Override
protected void onHandleIntent(Intent intent) {
// Build the widget update
RemoteViews updateViews = buildUpdate(this, intent.getIntExtra(WidgetActions.DATA_WIDGET_ID, 0));
// Push update for this widget to the home screen
ComponentName thisWidget = new ComponentName(this, MuzikLargeWidgetProvider.class);
AppWidgetManager manager = AppWidgetManager.getInstance(this);
manager.updateAppWidget(thisWidget, updateViews);
}
}
buildUpdate方法可以做更多的事情(設置intent for小部件的按鈕,設置文字瀏覽等),但它們與我的問題沒有關係。我在華碩TF 300 TG平板電腦上遇到這個問題(沒有根)。
任何幫助表示讚賞。
謝謝,你幫了我很多。我在4.1.1上遇到了小部件更新的問題,並且您創建小部件更新的意圖的方式非常棒! –
我很高興能幫上忙 – serdar