我正在使用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();
}
}
但是当我点击按钮时,吐司会在2或3秒后出现。
如果我将触发时间从5000更改为10000甚至0,则不会更改时间(单击按钮后10秒(创建警报))以显示Toast消息。单击按钮后,它总是在播放2或3秒后播放。
为什么触发器不起作用?
答案 0 :(得分:0)
尝试更换:
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
。