2017-07-26 114 views
0

我試圖從一個DialogFragment中發出一個觸發事件一段時間後的事件的警報。爲什麼我的AlarmManager不工作?

下面是相關的代碼,我把的onCreate():

broadcastReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context c, Intent i) { 
     Toast.makeText(c, "Rise and Shine!", Toast.LENGTH_LONG).show(); 
    } 
}; 
getActivity().registerReceiver(broadcastReceiver, new IntentFilter(ALARM_MANAGER_TAG)); 
pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, new Intent(ALARM_MANAGER_TAG), 0); 
alarmManager = (AlarmManager)(getActivity().getSystemService(Context.ALARM_SERVICE)); 

,然後當我按下啓動按鈕:

alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, timestampEnd, pendingIntent); 

在這種情況下timestampEnd = System.currentTimeMillis() + 10 * 1000;,10秒。

然後,我已重寫破壞:

@Override 
public void onDestroy() { 
    alarmManager.cancel(pendingIntent); 
    getActivity().unregisterReceiver(broadcastReceiver); 
    super.onDestroy(); 
} 

然而,什麼也沒有發生因某種原因。

回答

0

您正在通過AlarmManager.ELAPSED_REALTIME_WAKEUP,這意味着AlarmManager將在檢查時間戳時使用SystemClock.elapsedRealtime()。由於您傳遞的是從System.currentTimeMillis()中計算出來的東西,因此在警報觸發前,您必須等待大約47年。

請將您的第一個參數更改爲AlarmManager.RTC_WAKEUP或將您的時間戳更改爲從SystemClock.elapsedRealtime()開始計算。

+0

流逝的實時和rtc喚醒有什麼區別?邊際時間與絕對時間? – user8367195

+0

甜,它工作! – user8367195

+0

您可以閱讀文檔,但基本上其中一個是設備引導時從0開始的時間戳,其中一個是從1970年1月1日00:00開始的時間戳。 –