2012-10-01 109 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

警報由操作系統管理,一般在應用程序「退出」時不會被清除。把一些日誌記錄到你的接收器中,並觀察logcat輸出以查明它是否被調用。如果是,請調試您的通知代碼。

+0

顯然,即使我沒有引入任何更改,通知也開始出現。這就是我對AlarmManager的理解 - 一旦我設置了它並且接收器被註冊了,我就不需要做什麼了。 – PawelPredki

0

接收者應該有他們正在收聽的廣播的意圖過濾器。正如尼古拉在下面的評論中提到的那樣,如果你發送明確的意圖,這不是必要的。所以記住這一點。

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

同樣,你的意圖代碼在發送時應該設置一個名爲「REFRESH_THIS」的動作。

看看this的例子。它用很好的解釋來解釋整個過程。

+3

如果您使用顯式意圖,您當然不需要爲操作添加意圖過濾器,因爲OP是。 –

+0

@NikolayElenkov:好的。 – VendettaDroid

相關問題