2012-05-03 30 views
1

我打算開發一個應用程序,要求用戶將藍牙打開並關閉一週中的幾天,然後使用Alarm Service來執行此操作。我用下面的grunt代碼進行測試。使用報警服務在指定時間每天關閉藍牙

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

pendingIntent = PendingIntent.getService(AndroidAlarmService.this, 0, myIntent, 0); 

     AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
     /* 
     Calendar calendar = Calendar.getInstance(); 
     calendar.setTimeInMillis(System.currentTimeMillis()); 
     calendar.add(Calendar.SECOND, 30); 
     alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 
     pendingIntent); 

     */ 

     Calendar cur_cal = new GregorianCalendar(); 
     cur_cal.setTimeInMillis(System.currentTimeMillis()); 
     Calendar cal = new GregorianCalendar(); 
     cal.add(Calendar.DAY_OF_YEAR, cur_cal.get(Calendar.DAY_OF_YEAR)); 
     cal.set(Calendar.HOUR_OF_DAY, 13); 
     cal.set(Calendar.MINUTE, 23); 
     cal.set(Calendar.SECOND, 0); 
     cal.set(Calendar.MILLISECOND, cur_cal.get(Calendar.MILLISECOND)); 
     cal.set(Calendar.DATE, cur_cal.get(Calendar.DATE)); 
     cal.set(Calendar.MONTH, cur_cal.get(Calendar.MONTH)); 

    alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent); 

但是這不會在下午1點30分觸發我的服務。 註釋掉的代碼工作正常。它從當前時間起30分鐘觸發我的警報。但是當我硬編碼的時候。它不起作用。我無法找出Calender cal代碼片段中的錯誤。

我在做什麼錯?

回答

0

如果你想要重複報警,你應該使用alarmManager.setRepeating(...)來代替。 alarmManager.set(...)只會觸發一次。

+0

yes offcourse。但我用集合來測試。在我指定 – learner

+0

的時候警報沒有關閉,您也可以嘗試SystemClock.currentTimeMillis()作爲開始,以查看您的pendingIntent被觸發或日曆不會觸發。 – Thkru

+0

當我用註釋掉的代碼排除任何問題時,我的未決意圖正在觸發。但硬編碼的日曆實例不會觸發它 – learner