Android 警报管理器在 5 秒后重复并忽略间隔时间
Android Alarm manager is repeating after 5 seconds and ignoring interval time
我正在开发一个小部件应用程序,我必须每隔一分钟执行一些任务。所以,我正在使用 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 and this answer 以获取警报中的更多说明。
试试这个
alarmManager.setRepeating(
AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime(),
60000,
pendingIntent
);
在我的设备(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"
来自清单中我的接收者,因为此属性使您的接收者从其应用程序之外的来源接收消息,请检查此 link android receiver
我正在开发一个小部件应用程序,我必须每隔一分钟执行一些任务。所以,我正在使用 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 and this answer 以获取警报中的更多说明。
试试这个
alarmManager.setRepeating(
AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime(),
60000,
pendingIntent
);
在我的设备(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"
来自清单中我的接收者,因为此属性使您的接收者从其应用程序之外的来源接收消息,请检查此 link android receiver