Android警报管理器在5秒后重复并忽略间隔时间

时间:2017-04-18 08:26:25

标签: android android-widget alarmmanager

我正在开发一个小部件应用程序,我必须每隔一分钟执行一些任务。所以,我正在使用AlarmManager来实现这一目标。但不管我设定的间隔时间是什么,它每隔5秒重复一次。

我正在使用这样的AlarmManager:

 final AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        alarm.cancel(pendingIntent);
        long interval = 60000;
        alarm.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), interval, pendingIntent);

提前致谢。

4 个答案:

答案 0 :(得分:3)

AlarmManager.ELAPSED_REALTIME用于在系统启动时间后触发警报。而AlarmManager.RTC使用UTC时间。

 alarm.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), interval, pendingIntent);

这将在系统启动后 >开始运行,并以指定的时间间隔重复。

alarm.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), interval, pendingIntent);

这将从现在开始 >并以指定的时间间隔重复。

要解决此问题,建议您使用AlarmManager.RTC。如果您想在1分钟后重新启动闹钟,然后重复传递第二个参数:

calendar.getTimeInMillis() + interval

另请查看android documentation和此answer以获取有关警报的更多说明。

答案 1 :(得分:0)

试试这个

alarmManager.setRepeating(
    AlarmManager.ELAPSED_REALTIME_WAKEUP,
    SystemClock.elapsedRealtime(),
    60000, 
    pendingIntent
);

答案 2 :(得分:0)

在我的设备(Nexus5 cm13)中,它可以很好地工作 使用以下代码:

    private void doWork() {
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
            new Intent(this, SecondActivity.class), 0);
        final AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        alarm.cancel(pendingIntent);
        long interval = 60000;
        alarm.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(),
            interval, pendingIntent);
   }

所以我不清楚,你可以尝试“setRepeating”进行测试。

答案 3 :(得分:0)

我有同样的问题,我通过删除

来解决它
applyMiddleware

来自Manifest中的接收者,因为此属性使您的接收者能够从其应用程序之外的来源接收消息,请查看此链接you can just stick to compose