我被困在一個特定的scenerio中。只要用戶從應用更新時間,我就需要更新我的小部件。我曾嘗試通過向Intent Extras發送數據嘗試廣播,但未能這樣做。目前,我在AppWidgetProvider中有我的數據,並且我需要將此數據發送到服務從App發送數據到Widget
公共類CountdownWidget擴展AppWidgetProvider {0}共享上下文userDefaults;
// update rate in milliseconds
public static final int UPDATE_RATE = 1800000; // 30 minute
public static String nameOne = "";
@Override
public void onDeleted(Context context, int[] appWidgetIds) {
for (int appWidgetId : appWidgetIds) {
setAlarm(context, appWidgetId, -1);
}
super.onDeleted(context, appWidgetIds);
}
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Bundle extras = intent.getExtras();
nameOne = extras.getString("NAME_ONE");
Log.e("Name: ", nameOne);
super.onReceive(context, intent);
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
for (int appWidgetId : appWidgetIds) {
setAlarm(context, appWidgetId, UPDATE_RATE);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
public static void setAlarm(Context context, int appWidgetId, int updateRate) {
// Log.e("", "Updating Widget Service");
PendingIntent newPending = makeControlPendingIntent(context,
CountdownService.UPDATE, appWidgetId);
AlarmManager alarms = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
if (updateRate >= 0) {
alarms.setRepeating(AlarmManager.ELAPSED_REALTIME,
SystemClock.elapsedRealtime(), updateRate, newPending);
} else {
// on a negative updateRate stop the refreshing
alarms.cancel(newPending);
}
}
public static PendingIntent makeControlPendingIntent(Context context,
String command, int appWidgetId) {
Intent active = new Intent(context, CountdownService.class);
active.setAction(command);
active.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
// this Uri data is to make the PendingIntent unique, so it wont be
// updated by FLAG_UPDATE_CURRENT
// so if there are multiple widget instances they wont override each
// other
Uri data = Uri.withAppendedPath(
Uri.parse("countdownwidget://widget/id/#" + command
+ appWidgetId), String.valueOf(appWidgetId));
active.setData(data);
return (PendingIntent.getService(context, 0, active,
PendingIntent.FLAG_UPDATE_CURRENT));
}
}
正如你看到的名稱一是一個靜態變量。我可以使用getExtras接收關於onReceive方法的數據,但我無法將此數據傳遞給我的CountdownService服務。
我確實嘗試過CountdownWidget.nameOne但仍然無法提取服務中的數據。
任何幫助將不勝感激。
請查看更新的問題,我嘗試使用靜態變量,但未能獲得數據。 – muneikh 2012-07-30 10:55:05