2014-07-14 3 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

당신이 당신의 AndroidManifest.xml에'BroadcastReceiver'을 등록을? – 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

고맙습니다. 그것은 작동했습니다 :) –

+0

@ SreejithKarumanaghat의 코드가 작동하지 않는 이유를 설명해 주시겠습니까? on> 19 setRepeating이 setInexactRepeating을 호출해야합니다. – xaksis