如何每15分钟运行一次Android功能,特别是每天15分钟?

时间:2016-06-13 11:45:16

标签: java android alarmmanager

这可能是一个重复的问题,但我仍然面临着这方面的问题,希望有一个解决方案。提前谢谢。

如何设置闹钟管理器以便每隔15分钟执行一次该功能,例如每天8:00,8:15,8:30,8:45,9:00 无论应用程序何时启动。

举一个例子,如果让我说我在7:47开始申请主要活动,我希望闹钟在8:00开始,然后是8:15,8:30等。 ...我应该怎么做?如果有任何建议我会非常感激..

3 个答案:

答案 0 :(得分:1)

最好每隔一天设置一次闹钟

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();

希望它对您有用:)

答案 1 :(得分:1)

您应该设置两个报警管理器。通过计算剩余时间到适当的时间(例如上午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);
}

答案 2 :(得分:-1)

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);