2012-10-01 1 views
1

AlarmManager 알림에 반응해야하는 BroadcastReceiver에 문제가 있습니다. 나는이 주제에 대해 여러 글을 읽었지만 도움이 될만한 것을 찾지 못했다. 나는 뭔가를 놓치고 있어야합니다.Android AlarmManager 사용자가 응용 프로그램을 종료 할 때 BroadcastReceiver가 작동하지 않습니다.

// Receiver intent 
Intent intent = new Intent(mContext, CalendarAlarmReceiver.class); 
intent.putExtra(CalendarAlarmReceiver.SHOW, show); 
// Sender 
PendingIntent sender = PendingIntent.getBroadcast(mContext, hashRequestCode(show), intent, PendingIntent.FLAG_UPDATE_CURRENT); 
mPendingAlarmRequests.put(show.getChannel() + show.getName() + show.getStart().toGMTString(), sender); 
// Get AlarmManager 
AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); 
am.set(AlarmManager.RTC_WAKEUP, show.getStart().getTime(), sender); 

내가 브로드 캐스트 리시버를 확장하는 CalendarAlarmReceiver 클래스를 생성 :

나는 알람을 다음과 같은 방법을 설정합니다. onReceive() 메서드에서 응용 프로그램이 실행 중일 경우 제대로 작동하는 상태 표시 줄 알림을 시작합니다. 그러나 닫을 때까지 뒤로 버튼을 클릭하여 응용 프로그램을 종료하면 알림이 더 이상 나타나지 않습니다.

수신기가 전혀 호출되지 않고 작동하지 않는 알림이거나 수신기가 호출되지 않은 경우 확실하지 않습니다.

그것은 매니페스트 파일에 등록됩니다 :

<receiver android:name=".calendar.CalendarAlarmReceiver" > 
</receiver> 

나는이 수신기의 falut하지 않을 수 있지만 응용 프로그램이 정지 할 때 오히려 알람이 취소 될 수 있음을 읽어 보시기 바랍니다. 그런 경우 백그라운드에서 항상 작동하는 서비스에서 알람을 설정하는 솔루션입니까?

답변

3

경보는 OS에 의해 관리되며 응용 프로그램이 종료 될 때 일반적으로 지워지지 않습니다. 수신자에게 로깅을 걸고 로그 아웃 한 것을 확인하십시오. 그런 경우 알림 코드를 디버그하십시오.

+0

분명히, 변경 사항을 도입하지는 않았지만 알림은 오늘 갑자기 나타났습니다. 그것이 AlarmManager를 이해하는 방법입니다. 일단 설정하고 수신기를 등록하면 더 이상 할 일이 없습니다. – PawelPredki

0

수신기에는 듣고있는 브로드 캐스트에 대한 의도 필터가 있어야합니다. 니콜라이 (Nikolay)가 아래의 코멘트에서 명시 적 의도를 전송하는 경우에는 이것이 필요하지 않다고 언급했듯이. 그래서 그걸 명심하십시오.

<receiver android:name=".calendar.CalendarAlarmReceiver"> 
    <intent-filter> 
     <action android:name="REFRESH_THIS"/> 
    </intent-filter> 
</receiver> 

마찬가지로, 의도하는 코드는 보내는 동안 "REFRESH_THIS"라는 동작을 설정해야합니다.

예를 들어 this을 살펴보십시오. 좋은 설명으로 전체 과정을 설명합니다.

+3

OP와 같이 명시 적 인 텐트를 사용하는 경우에는 동작과 함께 의도 필터를 추가 할 필요가 없습니다. –

+0

@NikolayElenkov : 좋습니다. – VendettaDroid

관련 문제