如何每15分钟运行一次android功能,特别是每天15分钟的标记?
这可能是一个重复的问题,但我仍然面临着这个问题,希望有一个解决方案。提前致谢。如何每15分钟运行一次android功能,特别是每天15分钟的标记?
如何设置闹钟管理器运行,以便每隔15分钟的时间间隔(例如每天8:00,8:15,8:30,8:45,9:00)专门执行该功能不管应用程序启动的时间如何。
举一个例子,假设我在7:47开始了我的应用程序主要活动,并且我希望闹钟在8:00开始,随后是8:15,8:30等。 。我应该怎么做?我真的很感激,如果任何提出了建议..
你应该设置两路报警管理r.通过计算剩余时间到适当的时间(例如上午8:00),设置第一个触发时间。之后你应该在第一个闹钟管理器内创建另一个闹钟管理器,每15分钟触发一次。
的计算时间设定第一警报管理器使用波纹管代码:
Calendar c = Calendar.getInstance();
int m = calendar.get(Calendar.MINUTE);
long start = System.currentTimeMillis();
int remain=0;
if (m<15)
{
remain = 15-m;
}
else if (m<30)
{
remain = 30-m;
}
else if (m<45)
{
remain = 45-m;
}
else
{
remain = 60-m;
}
remain=start + remain*60*1000// convert it to milisecond and plus it to current time;
编辑
之后,你可以使用代码波纹管设置第一报警经理:
AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, FirstReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
am.set(AlarmManager.RTC_WAKEUP,remain, pi);
所以现在在你的FirstReceiver类中做类似下面的事情:
public class FirstReceiver extends BroadcastReceiver
{
//do what ever you want + code bellow to setup second alarm manager
Intent intent = new Intent(this, SecAlarm.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0);
AlarmManager am= (AlarmManager)getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME,SystemClock.elapsedRealtime(),
15*60*60,pendingIntent);
}
最好设置一个闹钟要与一个天间隔
public void setAlarm(Context context) {
AlarmManager am =(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, Alarm.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
am.setRepeating(AlarmManager.RTC_WAKEUP, yourTimeInMilisecond, 24 * 60 * 60 * 1000, pi); // Millisec * Second * Minute
}
这里yourTimeInMillisecond
每次都是要设置闹钟,就像如果时间你要为明天上午9时报警,那么,这将是:
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 9);
calendar.set(Calendar.MINUTE, 0);
calendar.add(Calendar.DAY_OF_YEAR, 1);
long yourTimeInMilisecond = calendar.getTimeInMillis();
希望它会为你工作:)
感谢您的建议,但是,没有特定的时间来设置闹钟,我想在我的活动开始时执行该功能...所以如果我的活动在7:47开始,它仍然不是15分钟的标记然而,我只希望在8:00锐利时执行该函数。 – XXX
@Neo使用'DateUtils.DAY_IN_MILLIS'将会更清洁,而不是自己计算以毫秒为单位的时间。 –
PendingIntent pendingIntent = PendingIntent.getBroadcast(
this.getApplicationContext(), 234324243, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()
+ (time limits), pendingIntent);
一些解释会很好。 –
没有任何解释代码的功能,或者提出这种方法的任何理由,这个答案是没有用的。接下来会发生的是,该人员将复制并粘贴代码并遇到问题,因为您没有提供任何解释。但这是你的第一个答案,所以请看[让你的答案很棒的一些技巧](http://stackoverflow.com/help/how-to-answer)。 – ishmaelMakitla
我认为你需要设置两个报警管理器而不是一个。 – pooyan
在Android 6.0及更高版本上这是不切实际的。打盹模式将阻止对时间的精确控制,除非用户将您的应用添加到电池优化白名单。我强烈建议你设计你的应用程序,以避免需要做任何后台工作,更不用说这种精确度。 – CommonsWare
@CommonsWare,感谢您的评论,理解这对于Android平台的更高版本来说是不切实际的,但是我目前正在使用运行在Android 2.3上的专有设备,其中设备将依赖于电源模式,因此该应用将在顶级24×7因此需要有这么繁琐的工作,你对这种情况有什么建议吗? – XXX