2014-02-08 16 views
3

AlarmManager이 사용자 모바일 장치 시간을 기준으로 매일 오전 10시 30 분에 발생하도록하고 싶습니다. 오전 10시 30 분에 화재가 발생하지만 문제는 오전 10시 30 분 이후로 매 30 분마다 또는 비정상적인 시간 간격 후에도 시간없이 반복됩니다.

이 문제를 방지하려면 어떻게해야합니까? Successfull 로그인 및 등록 ButtonCick() 이벤트에서 이것을 호출합니다. 또한 사용자가 로그 아웃하면이 작업을 중단하고 싶습니다.

내 코드는 다음과 같습니다 :AlarmManager가 시간에 실행되지 않습니다.

 Intent myIntent = new Intent(Register.this, AlarmReceiver.class); 

     PendingIntent pendingIntent = PendingIntent.getBroadcast(Register.this, 
       0, myIntent, 0); 

     AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 

     Calendar firingCal = Calendar.getInstance(); 
     Calendar currentCal = Calendar.getInstance(); 

     firingCal.set(Calendar.HOUR_OF_DAY, 10); 
     firingCal.set(Calendar.MINUTE, 30); 
     firingCal.set(Calendar.SECOND, 0); 

     long intendedTime = firingCal.getTimeInMillis(); 
     long currentTime = currentCal.getTimeInMillis(); 

     if (intendedTime >= currentTime) { 

      WakeLocker.acquire(getApplicationContext()); 

      alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, intendedTime, 
        AlarmManager.INTERVAL_DAY, pendingIntent); 

      WakeLocker.release(); 

     } else { 

      WakeLocker.acquire(getApplicationContext()); 

      firingCal.add(Calendar.DAY_OF_MONTH, 1); 
      intendedTime = firingCal.getTimeInMillis(); 

      alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, intendedTime, 
        AlarmManager.INTERVAL_DAY, pendingIntent); 

      WakeLocker.release(); 
     } 
+0

targetSdkVersion은 무엇입니까? – user2450263

+0

targetSdkVersion은 –

답변

3

코드가 잘 보인다. 대상 버전은 19

참고 인 경우 : API 19로

, 모든 반복 알람이 부정확하다. 정확한 배달 시간이 필요한 응용 프로그램의 경우 위에서 설명한대로 매번 일정을 조정하여 일회성 정확한 경보를 사용해야합니다. targetSdkVersion이 API 19 이전 인 레거시 응용 프로그램은 반복 경보를 포함하여 모든 경보를 계속 처리합니다. http://developer.android.com/reference/android/app/AlarmManager.html#setRepeating(int,long,long,android.app.PendingIntent)

참고 :

는 API 19 년부터이 메서드에 전달 트리거 시간이 부정확로 처리됩니다 : 알람 전에 전달되지 않습니다 소스가

이번에는 연기 될 수 있지만 나중에 배달 될 수 있습니다. 운영 체제는이 정책을 사용하여 전체 시스템에서 경보를 "일괄 처리"하여 장치가 "깨어나고"배터리 사용을 최소화해야하는 횟수를 최소화합니다. 일반적으로 가까운 미래에 예정된 알람은 먼 미래에 예정된 알람만큼 지연되지 않습니다.

새 일괄 처리 정책을 사용하면 배달 주문 보장이 이전보다 훨씬 강력 해집니다. 응용 프로그램에서 여러 개의 알람을 설정하면 이러한 알람의 실제 배달 순서가 요청한 배달 시간 순서와 일치하지 않을 수 있습니다. 응용 프로그램에 강력한 주문 요구 사항이있는 경우 필요한 동작을 수행하는 데 사용할 수있는 다른 API가 있습니다. setWindow (int, long, long, PendingIntent) 및 setExact (int, long, PendingIntent)를 참조하십시오.

targetSdkVersion이 API 19 이전 인 응용 프로그램은 계속 이전 경보 동작을 얻습니다. 예약 된 모든 경보는 정확하게 처리됩니다.

출처 : 즉, 귀하의 요구에 대한 작동하는지 http://developer.android.com/reference/android/app/AlarmManager.html#set(int,long,android.app.PendingIntent)

가 확인하시기 바랍니다.

+0

입니다. 답장을 보내 주셔서 감사합니다. 나는 그것을 체크하고 그것이 나를 위해 잘 작동 하는지를 알려줄 것이다. –

+0

그것은 당신을 위해 일 했나요 :) – user2450263

관련 문제