AlarmManager Android 每天
Posted
技术标签:
【中文标题】AlarmManager Android 每天【英文标题】:AlarmManager Android Every Day 【发布时间】:2011-06-01 13:21:09 【问题描述】:我正在尝试制定时间表。
它应该在每天下午 1 点或 2 点运行...
目前我只能让它每 10 秒或 10 分钟运行一次...
Intent myIntent = new Intent(androidAlarmService.this, MyAlarmService.class);
pendingIntent = PendingIntent.getService(AndroidAlarmService.this, 0, myIntent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 10);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
Toast.makeText(AndroidAlarmService.this, "Start Alarm", Toast.LENGTH_LONG).show();
谢谢
【问题讨论】:
【参考方案1】:每天都会报警。
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, AlarmManager.INTERVAL_DAY , pendingIntent);
【讨论】:
set()
只会触发一次。 setRepeating()
每天都会触发。
-1 此代码不正确(至少从 SDK 2.1 开始)。 AlarmManager.setRepeating 接受 4 个参数,而不是 3 个。【参考方案2】:
此代码将在每天下午 1 点或 2 点运行 Intent
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 13); // For 1 PM or 2 PM
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
PendingIntent pi = PendingIntent.getService(context, 0,
new Intent(context, MyClass.class),PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, pi);
【讨论】:
您可能需要添加 calendar.add(Calendar.DAY_OF_YEAR, 1);避免立即触发警报。 你也可以添加 calendar.set(Calendar.MILLISECOND, 0);更准确地说:) 当应用程序进入后台/关闭/暂停时也会运行吗? @MarioGalván 是的,直到警报被取消,或者设备重新启动并且此代码不再执行 我已经尝试过了,它工作正常,但几天后它就停止了,应用程序停止触发 BroadcastReceiver 你知道发生了什么事情的任何人以上是关于AlarmManager Android 每天的主要内容,如果未能解决你的问题,请参考以下文章
使用 AlarmManager 设置重复通知 - Android
android AlarmManager 在凌晨12点 手机实机无法达成的问题?
android app被杀死 alarmmanager能不能唤醒