0
我使用了一項服務來更新一個appwidget,並且還安排了定期更新的重複警報(即它仍然調用服務類)。我現在的問題是,我不知道如何取消報警,並在主屏幕上刪除appwidget時停止服務。我已經嘗試取消appwidget的onDeleted()中的警報,它具有與創建警報相同的掛起意圖,但未取消它。如何取消服務中的鬧鐘?
下面是服務的時間表代碼:
public void onDeleted(Context context, int[] appWidgetIds) {
for (int appWidgetId : appWidgetIds) {
//cancel the alarm
Intent widgetUpdate = new Intent();
//widgetUpdate.setClassName(this, appService.class);
//Uri data = Uri.withAppendedPath(Uri.parse(URI_SCHEME + "://widget/id/"),
// String.valueOf(appWidgetId));
//widgetUpdate.setData(data);
PendingIntent newpending = PendingIntent.getService(context, 0, widgetUpdate,
PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarm =
(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarm.cancel(newpending);
//cancel the service
context.stopService(new Intent(context,WeatherService.class);
}
super.onDeleted(context, appWidgetIds);
}
請你能指出,如果我做錯了什麼:
Intent widgetUpdate = new Intent();
widgetUpdate.setClass(this, appService.class);
//widgetUpdate.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
widgetUpdate.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[]{appWidgetId});
//widgetUpdate.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
Uri data = Uri.withAppendedPath(Uri.parse(URI_SCHEME + "://widget/id/"),
String.valueOf(appWidgetId));
widgetUpdate.setData(data);
PendingIntent newpending = PendingIntent.getService(this, 0, widgetUpdate,
PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarm = (AlarmManager)getSystemService(ALARM_SERVICE);
alarm.setRepeating(AlarmManager.ELAPSED_REALTIME,
SystemClock.elapsedRealtime()+ updateRate, updateRate, newpending);
在appWidgetProviderClass的onDeleted()
呢?謝謝。
只是一個側面說明,已經離開那些評論代碼,只是爲了讓你知道我也試過了。
gosh謝謝,我現在可以享受我的星期日,我想知道我做錯了什麼。順便說一句,如果我可能會問,你認爲它是一個很好的設計或想法,在服務類中安排重複報警。我試過在配置類中做,但從未發生過。我不知道它是否因爲配置類調用這個服務類。 – user712109 2011-04-17 13:20:35
@ user712109:對不起,我無法在摘要中回答這個問題。我不知道「配置類」是什麼,等等。 – CommonsWare 2011-04-17 13:31:18
哦,對不起,我的意思是用戶設置配置類的更新率,這就是警報如何獲得計劃的價值;來自首選項,因爲配置類必須從服務類中最初更新小部件。但因爲它不是問題的一部分,所以不會因此而打擾你。再次感謝 – user712109 2011-04-17 13:54:22