2011-09-13 173 views
2

下面是我設置每天重複鬧鐘的代碼。現在我需要在2天后停止報警。我試圖在添加2天后停止警報,但它不起作用。請任何人幫助我。如何在特定時間2天后停止報警服務?

Intent myIntent = new Intent(this, MyAlarmService.class); 

    pendingIntent = PendingIntent.getService(this, (int) System.currentTimeMillis(), myIntent, 0); 

    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 

    Calendar calendar = Calendar.getInstance(); 
    calendar.set(Calendar.HOUR_OF_DAY, hour1); 
    calendar.set(Calendar.MINUTE, min1); 
    calendar.set(Calendar.SECOND, 0); 

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 24*60*60*1000, pendingIntent); 

    Toast.makeText(this, "Start Daily Alarm", Toast.LENGTH_LONG).show(); 

    //trying to cancel after 2 days 
    // add days to current date using Calendar.add method 

    calendar.add(Calendar.DATE, 2);  
    pendingIntent = PendingIntent.getService(this, (int) System.currentTimeMillis(), myIntent, 0); 
    AlarmManager alarmManagerstop = (AlarmManager)getSystemService(ALARM_SERVICE); 
    alarmManagerstop.cancel(pendingIntent);  
+0

你有什麼解決方案嗎? – Nik

回答

2

這裏您將第二個參數中的系統時間以毫秒爲單位。

PendingIntent.getService(this, (int) System.currentTimeMillis(), myIntent, 0); 

第二個參數是請求代碼通過,所以你必須做這樣的事情。

private static int REQUEST = 1; 

您必須爲您設置的每個鬧鐘保留此請求代碼。請注意,如果您通過此請求代碼具有相同的值,那麼它將覆蓋您的鬧鐘。所以你必須傳遞唯一的請求代碼。

對於停止報警相同請求代碼需要找到的PendingIntent對象,並傳遞給alarm.cancel方法像這樣

private static int REQUEST = 1; 
PendingIntent.getService(this, REQUEST, myIntent, 0); 
AlarmManager alarmManagerstop = (AlarmManager)getSystemService(ALARM_SERVICE); 
alarmManagerstop.cancel(pendingIntent); 

,當你使用的是在每一個milisecond使更改系統milisecond請求代碼也經常改變。要使用這個毫秒,你可以存儲任何靜態變量,然後你可以使用相同的值。

+0

對不起,我沒有得到。我嘗試使用alarmmanagerstop中第二個參數的請求。但它不工作,也需要在2天后自動停止振鈴。 – sachi

相關問題