2017-07-26 110 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开始的时间戳。 –