2011-01-15 7 views
3

작동하지 않음 :이 작동하지 않습니다안드로이드 반복 알람이 잘 작동

Intent intent = new Intent(HelloAndroid2.this, AlarmReceiver.class); 

    PendingIntent pendingIntent = PendingIntent.getBroadcast(HelloAndroid2.this, 0, 
    intent, PendingIntent.FLAG_ONE_SHOT); 

    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (12 * 1000), pendingIntent); 

. 나는 경보 만 듣는다. 문제가 무엇입니까

Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.add(Calendar.SECOND, 5); 

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 7000, pendingIntent); 

:

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (12 * 1000), 3 * 1000, pendingIntent); 

나는이, 아니 행운을 시도? FLAG_ONE_SHOT에 대한 PendingIntent doc에서

답변

3

는 :

이 PendingIntent는 는 한 번만 사용할 수 있습니다. 설정된 경우 send()가 호출 된 후 이 자동으로 취소되고 이후에 전송하려고 시도하면 이 실패합니다. pendingIntent 처음 발사 후

는 그래서,이 취소되고 알람 매니저로 보낼 수있는 다음 시도는

하기에 코드 샘플을 보면 FLAG_UPDATE_CURRENT에게

+0

매우 쉽습니다. 고맙습니다. – erdomester

0

를 사용하여 시도 실패 주문 :

첫 번째 샘플에서 AlarmManager.set을 사용하고 있습니다. 이것은 일회용 알람을위한 것이므로 예, 한 번만 작동합니다. AlarmManager.set을 사용하려면 트리거 된 코드에서 마지막으로해야 할 일은 새로운 알람을 설정하는 것입니다 (새로운 PendingIntent를 사용해야 함).

두 번째 예에서는 반복 알람을 사용하고 있습니다. 은 OS가 경고의 반복되는 부분을 처리하므로이 때마다 새로운 PendingIntent를 생성해야합니다.

알람이 매 3 초마다 반복되어서는 안되기 때문에 알람을 처리하기 위해 작성한 BroadcastReceiver 구현을 살펴볼 필요가 없습니다.

올바르게 구현했는지 확인하십시오. onReceive() 메소드의 모든 코드를 주석 처리하고 대신 로그 메시지를 작성하십시오. 알람이 발생할 때마다 logcat에 로그 메시지가 나타나면 로그 메시지를 유지하면서 코드를 다시 추가하고 메서드가 끝날 때까지 다른 로그 메시지를 추가하십시오. 메소드를 실행하는 데 걸리는 시간을 확인할 수 있습니다. 예기치 않은 부작용을 피하기 위해 알람이 다시 울리기 전에 종료해야합니다.

반복 알람을 원한다면, android.os.Handler는 AlarmManager를 통해 설정된 알람이 매우 정확하게 발동하지만 훨씬 효율적인 접근 방법입니다.

관련 문제