我使用的是min API 19,并在Android 6.0中执行。我已经用setExact创建了一个警报(我想每5秒执行一次)。为了测试它,我刚刚做了这个(我在一个片段中创建了它):
Intent intent = new Intent(getActivity(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) (getActivity().getSystemService(getContext().ALARM_SERVICE));
alarmManager.setExact(AlarmManager.RTC_WAKEUP, 5000, pendingIntent);
它叫:
public class AlarmReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Test"+SPreferences.getCountedSample(context), Toast.LENGTH_SHORT).show();
}
}
但当我点击按钮时,吐司会在两三秒钟后出现。
如果我将触发时间从5000更改为10000甚至0,则不会更改显示Toast消息的时间(单击按钮(创建警报)后10秒)。它总是在点击按钮后2或3秒呼叫广播。
为什么触发器不起作用?
尝试替换:
alarmManager.setExact(AlarmManager.RTC_WAKEUP, 5000, pendingIntent);
带有:
alarmManager.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+5000, pendingIntent);
setExact()
的第二个参数是时间。您选择了RTC_WAKEUP
,因此时间在实时时钟的时基中。该时钟的"现在"值为System.currentTimeMillis()
,因此从现在起5秒为System.currentTimeMillis()+5000
。