我正在开发一个小部件应用程序,我必须每隔一分钟执行一些任务。所以,我正在使用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);
提前致谢。
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以获取更多有关Alarms的说明。
在我的设备(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”进行测试。
我有同样的问题,我通过删除它来解决它
android:exported="true"
从我在Manifest中的接收器,因为这个attribut使你的接收器从其应用程序之外的源接收消息,请检查此链接android receiver
试试这个
alarmManager.setRepeating(
AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime(),
60000,
pendingIntent
);