setExact()不会在(早先)

时间:2016-04-19 16:14:02

标签: android

我正在使用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秒后播放。

为什么触发器不起作用?

1 个答案:

答案 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