2012-05-30 3 views
2

내 앱이 매시간 특정 작업을 실행해야합니다. 앱이 실행 중이거나 일시 중지되었거나 종료 된 경우에도 상관 없습니다.Android : 내 애플리케이션이 종료 된 경우에도 호출되는 alarmmanager 브로드 캐스트 이벤트를 예약하는 방법은 무엇입니까?

앱이 실행 중이거나 일시 중지 된 경우 AlarmManager broadcastreceiver를 예약하면됩니다. 하지만 응용 프로그램이 닫히면 "unregisterReceiver"를 호출하여 의도를 유출하지 않아야하며 응용 프로그램이 깨어나서 (또는 무언가) 작업을 처리하지 않습니다.

다음 질문은 : 등록을 취소 할 필요가없는 alarmmanager 작업을 예약하는 방법에 따라 응용 프로그램이 종료 된 경우에도 호출됩니다.

답변

3

AlarmManager.setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)을 사용하십시오. 유형이 AlarmManager.RTC_WAKEUP으로 설정되어 기기가 절전 모드 일 때 깨어 났는지 확인하십시오 (요구 사항 인 경우). 이 같은

뭔가 :

Intent intent = new Intent("com.foo.android.MY_TIMER"); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); 
    AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    long now = System.currentTimeMillis(); 
    long interval = 60 * 60 * 1000; // 1 hour 
    manager.setRepeating(AlarmManager.RTC_WAKEUP, now + interval, interval, 
     pendingIntent); // Schedule timer for one hour from now and every hour after that 

는이 방법에 PendingIntent를 전달합니다. 인 텐트 누출에 대해 걱정할 필요가 없습니다.

더 이상 필요하지 않은 경우 AlarmManager.cancel()으로 전화하여 알람을 끄십시오.

수신자를 코드에 등록하지 마십시오.

<receiver android:name=".MyReceiver"> 
     <intent-filter> 
      <action 
        android:name="com.foo.android.MY_TIMER"/> 
     </intent-filter> 
    </receiver> 
+0

앱이 "강제 중지됨"인 경우 수신되지 않습니다. 수신자는 BroadcastReceiver의 매니페스트 항목에 <intent-filter> 태그를 추가하기 만하면됩니다. 거기에 대한 해결 방법이 있습니까? – Mani

+0

아닙니다. https://groups.google.com/forum/#!topic/android-gcm/MqVlA3Sj26c –

+0

간격으로 'AlarmManager.INTERVAL_HOUR'을 (를) 사용할 수 있습니다. –

0

이 경우 Service이라고하는 Android 구성 요소를 사용자에게 제공해야합니다. 서비스 코드에서 매시간 PendingIntent 클래스로 AlarmManager를 사용하여 작업을 예약 할 수 있습니다. AlarmManger가 서비스 구성 요소에 선언되었으므로 GUI가 필요 없으며 장치에 배터리가있을 때까지 백그라운드에서 실행됩니다.

관련 문제