2014-07-14 99 views
1

我想使用Alarmmanager和BroadcastReciever設置每日重複警報,但警報沒有正確啓動。每日重複警報不起作用

我用下面的代碼來設置鬧鈴時,應用程序安裝第一次:

checkFirstTime = getSharedPreferences("firstRun", 0); 
    db = new DatabaseHandler(this); 
    if (checkFirstTime.getBoolean("my_first_time", true)) 
    { 
     db = new DatabaseHandler(this); 
     db.InitializeAll();  
     checkFirstTime.edit().putBoolean("my_first_time", false).commit(); 

     //To set alarm manager 
     setAlarmManager(); 

     Toast.makeText(context, "alarm set", Toast.LENGTH_LONG).show(); 


    } 

功能SetAlarm:

private void setAlarmManager() 
    { 

      Calendar calendar = Calendar.getInstance(); 
      calendar.setTimeInMillis(System.currentTimeMillis()); 
      calendar.set(Calendar.HOUR_OF_DAY, 12); 
      calendar.set(Calendar.MINUTE, 00); 
      calendar.set(Calendar.SECOND, 0); 
      calendar.set(Calendar.AM_PM, 0); 

      AlarmManager alarmMgr; 

     alarmMgr = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE); 
      Intent intent = new Intent("com.example.testaclrtn"); 
      PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, 
        intent, PendingIntent.FLAG_UPDATE_CURRENT); 



      Calendar now = Calendar.getInstance(); 
      long calendarTime= 0; 

      if(calendar.getTimeInMillis() <= now.getTimeInMillis()) 
       calendarTime = calendar.getTimeInMillis() + (AlarmManager.INTERVAL_DAY+1); 
      else 
       calendarTime = calendar.getTimeInMillis() ; 

      alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendarTime, 
        AlarmManager.INTERVAL_DAY, pendingIntent); 

    } 

和BroadcastReciever包含以下代碼:

public class AlarmReceiver extends BroadcastReceiver { 

    SharedPreferences storeDay; 
    DatabaseHandler db; 


    @Override 
    public void onReceive(Context context, Intent intent) 
    { 

      Toast.makeText(context, "Alarm worked.", Toast.LENGTH_LONG).show(); 
      db = new DatabaseHandler(context); 
      whenNextDay(); 

      Message msgToActivity = new Message(); 
      msgToActivity.what = 5; 


    } 

    public void whenNextDay() 
    { 
     int count = db.getPickCount(2); 
     int target = db.getPickTarget(2); 
     long time = db.getTimeCount(2); 
     db.updatePickCount(3, count); 
     db.updatePickTarget(3, target); 
     db.updateTimeCount(3, time); 

     count = db.getPickCount(1); 
     target = db.getPickTarget(1); 
     time = db.getTimeCount(1); 
     db.updatePickCount(2, count); 
     db.updatePickTarget(2, target); 
     db.updateTimeCount(2, time); 

     db.updatePickCount(1, 0); 
     db.updateTimeCount(1, 0); 
     db.close(); 


    } 

請幫我弄清楚我使用的邏輯或代碼有什麼問題。由於

+1

有您註冊'BroadcastReceiver'在AndroidManifest.xml中? – Blacklight

+0

是的,我已經和鬧鐘一次被觸發,但沒有重複。 –

回答

2

使用此功能設置重複報警,即每24小時觸發:

public static void setRepeatingSync(Context context) { 
    try { 

    AlarmManager alarmMgr = (AlarmManager) context 
       .getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent(context, AlarmReceiver.class); 
     PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 
       PendingIntent.FLAG_UPDATE_CURRENT); 
     alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, 
       System.currentTimeMillis(), (24 * 1000 * 60 * 60), 
       alarmIntent); //every 24 hours 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+1

thanx男人!它的工作:) –

+0

你能解釋爲什麼@SreejithKarumanaghat的代碼不起作用? on> 19 setRepeating無論如何都應該調用setInexactRepeating對嗎? – xaksis