2012-10-18 83 views
3

我想在android中設置一個重複鬧鐘,最終會在用戶指定的時間上升。但是,一旦設置了警報,警報即會立即消失,即使在確定警報設置之後警報沒有設置爲熄滅時也是如此。例如,我將下面的代碼設置爲在10:43發出警報,所以我在10:41設置了警報,但警報立即熄滅。有任何想法嗎?提前致謝。在android中設置重複報警

public class Alarm extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     PowerManager pm = (PowerManager) context 
       .getSystemService(Context.POWER_SERVICE); 
     PowerManager.WakeLock wl = pm.newWakeLock(
       PowerManager.PARTIAL_WAKE_LOCK, ""); 
     wl.acquire(); 


     Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); // For 

     Intent scheduledIntent = new Intent(context,ReminderMessage.class); 
     scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(scheduledIntent); 
     // example 

     wl.release(); 
    } 

    public void SetAlarm(Context context) { 
     AlarmManager am = (AlarmManager) context 
       .getSystemService(Context.ALARM_SERVICE); 

     Date dat = new Date(); 
     Calendar cal_alarm = Calendar.getInstance(); 
     Calendar cal_now = Calendar.getInstance(); 
     cal_now.setTime(dat); 
     cal_alarm.setTime(dat); 
     cal_alarm.set(Calendar.HOUR_OF_DAY, 10); 
     cal_alarm.set(Calendar.MINUTE, 43); 
     cal_alarm.set(Calendar.SECOND, 0); 

     if(cal_alarm.before(cal_now)){ 
      cal_alarm.add(Calendar.DATE, 1); 
     } 


     Intent i = new Intent(context, Alarm.class); 
     PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); 
     am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), cal_alarm.getTimeInMillis() , pi); // Millisec * Second * Minute 
    } 

    public void CancelAlarm(Context context) { 
     Intent intent = new Intent(context, Alarm.class); 
     PendingIntent sender = PendingIntent 
       .getBroadcast(context, 0, intent, 0); 
     AlarmManager alarmManager = (AlarmManager) context 
       .getSystemService(Context.ALARM_SERVICE); 
     alarmManager.cancel(sender); 
    } 
} 

回答

6

我覺得你行:

am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), cal_alarm.getTimeInMillis() , pi); // Millisec * Second * Minute 

立即觸發報警,第二個參數是預定的時間,第三個是週期。所以,如果你想你的鬧鐘在cal_alarm時間去了,你要使用這樣的:

am.setRepeating(AlarmManager.RTC_WAKEUP, cal_alarm.getTimeInMillis(), 1000*60*5 , pi); // Millisec * Second * Minute 

這應該在cal_alarm時間熄滅,重複每隔5分鐘。這就是問題所在

AlarmManager.SetRepeating API Doc

+0

是的,我有參數的setAlarm有點混淆。非常感謝! – johns4ta

+0

沒問題!有時它只需要第二組眼睛。 ;) – SimpsOff