2013-02-08 3 views
0

간단한 알리미 응용 프로그램을 쓰고 있습니다. 모든 미리 알림은 DB에 저장됩니다. DB를 쿼리하고 여분의 타임 스탬프가있는 AlarmManager에 pendingIntents를 만드는 서비스가 있습니다. 또한 Broadcast Receiver를 사용하여 AlarmManager에서 인 텐트를 수신합니다. 이 방송 수신기는 미리 알림 옵션 (해제, 일시 중지 등)으로 미리 알림 활동을 시작합니다. 이 스키마는 작동하지만 좋지 않을 것 같습니다. 포 그라운드에서 미리 알림 활동이 있으면 새로운 미리 알림 활동이 시작됩니다 (현재 배경으로 이동). 현재 활동을 새로운 활동으로 대체하지 않고 사용자에게 알려주고 현재 이후에 표시되는 새로운 알림이 있음을 알려드립니다. 내 생각으로많은 PendingIntents, BroadcastReceiver 및 활동

답변

0

, 내 작업에 대한 좋은 해결책을 발견했습니다

1) 나는 내 알림 활동 launchMode는 "singleTop"이라고 AndroidManifest를 설정했습니다. launchMode에 대한 자세한 내용은 여기 http://developer.android.com/guide/topics/manifest/activity-element.html 두 단어로 방송 수신자가 전경에있는 활동을 시작하려고하면 onCreate가 아니라 onNewIntent가 호출됩니다.

2) 필자는 필자의 활동에서 onNewIntent 메서드를 재정의하고 모든 수신 인 텐트 (브로드 캐스트에서)를 ArrayList에 저장해야했습니다.

3) finish() 전에 ArrayList에서 현재 인 텐트를 제거해야하며 크기가 0이되면 실제로 작업을 마칩니다().

하나의 중요한 추가 사항. 방송에서 수신기의 의도가 있어야합니다 FLAG_ACTIVITY_SINGLE_TOP, 같은 :

intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);

기본 활동 없음 onNewIntent가 호출되지 않으면 해당 항목이 없습니다. 알다시피, 이것은 알려진 문제입니다 : http://code.google.com/p/android/issues/detail?id=4155 안드로이드 1.6에서 발견 된 버그는 여전히 존재합니다. 그래서 지금은 기능입니다 :)

내 영어로는 죄송합니다. 읽기가 쉽지만 작성하기가 쉽습니다.