2012-08-25 3 views
7

이것을 달성하고 싶습니다 :특정 시간에 매일 알림

첫 번째 응용 프로그램을 켠 후 특정 조건이 충족되면 매일 오후 2시에 알림을받습니다. 조건이 false이면 오늘 알림이 표시되지 않습니다. 오후 2시에 상태를 확인하면 인터넷에서 일부 데이터를 다운로드합니다.

지금까지 나는 AlarmManager 및 그 메소드 setRepeating()을 24 시간 간격으로 사용했습니다. AlarmManager는 Service을 발생시킵니다. 이 서비스에서 데이터를 다운로드하고 조건을 확인한 후 이것이 사실이라면 Notification을 표시합니다. 다운로드가 5 초 이상 지속될 수 있으므로이 서비스에 대해 android:process=":background"을 선언하여 별도의 프로세스로 실행하고 UI를 차단하지 마십시오.


1 : 사용자가 열리면 응용 프로그램의는 오후 4시 가정 해 봅시다 (과 조건이 true), 그 통지 즉시를 받게됩니다

이 방법은 두 가지 단점이있다. setRepeating() 문서에서 :

시간이 과거에 발생하면

는 알람이 트리거 시간이 반복 간격을 기준으로 얼마나 멀리 과거에 따라 경보 카운트 즉시 을 트리거됩니다.

해당 사용자에게 오늘 날, 다음날에만 알림이 수신되지 않도록하겠습니다.


2 : 사용자가 전화를 끊은 후에 내 알림이 표시되지 않을까 걱정됩니다. AlarmManager 문서에서 : 장치가 잠 (그리고 그들은 그 시간 동안 꺼 경우 선택적으로 장치를 깨울 수)하지만 끄고 재부팅하면 삭제됩니다 동안

등록 된 알람이 유지됩니다.

언제나 작동하도록 할 수 있는지 알 수 없습니다.


더 좋은 방법이 있다면 환영합니다.

답변

6

1 : 난 내가 질문을 이해하면 확실히 모르겠지만, 나는 이미 지난 오후 2시 오후 2에 하루를 추가 할 경우 당신이해야 할 모든 생각 :

GregorianCalendar twopm = new GregorianCalendar(); 
twopm.set(GregorianCalendar.HOUR_OF_DAY, 14); 
twopm.set(GregorianCalendar.MINUTE, 0); 
twopm.set(GregorianCalendar.SECOND, 0); 
twopm.set(GregorianCalendar.MILLISECOND, 0); 
if(twopm.before(new GregorianCalendar())){ 
    twopm.add(GregorianCalendar.DAY_OF_MONTH, 1); 
} 
alarmManager.setRepeating(type, twopm.getTimeInMillis(), 1000*60*60*24, intent); 

2 : 당신은 할 수 부팅을 위해 BroadcastReceiver를 등록하고 다시 알람을 시작하십시오. 이것에보십시오 : Android BroadcastReceiver on startup - keep running when Activity is in Background

+0

이것은 좋은 제안이다, 나는 또한 이것을 사용한다 – slinden77

+0

대단히 감사합니다! 나는 질문이있다, 당신은 확실한가 : twopm.set (GregorianCalendar.HOUR, 2) 시간 오전, 오전 설정 아닌가요? 어쩌면 twoPm.set (GregorianCalendar.HOUR_OF_DAY, 14)을 사용해야합니까? –

+0

예, 당신 말이 맞습니다. – AntonS

관련 문제