1

在这里,我将使用闹钟服务每隔 30 分钟播放一次闹钟。现在我已经将它设置为从每次开始每 10 秒播放一次。

这是代码:

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.settings_layout);


    Intent myIntent = new Intent(SettingsActivity.this, MyAlarmService.class);
    pendingIntent = PendingIntent.getService(SettingsActivity.this, 0, myIntent, 0);

    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 10*1000, pendingIntent);

}

现在的问题是,我想从 12:30 开始警报,而不是从应用程序开始的时间开始,它应该在每 30 分钟重复播放。比如 1:00, 1:30, 2:00 。. . ETC

那么我必须在我的代码中做哪些更改?

4

5 回答 5

3

在特定时间启动服务。看到这篇文章可能会有所帮助:

使用 Alarmmanager 在特定时间启动服务

于 2012-04-06T22:12:13.193 回答
1

使用Set 方法将您的初始闹钟时间设置为 12:30 。

当闹钟响起时,设置您的下一个闹钟时间并继续这样做,直到您不再需要闹钟为止。

您不需要服务来完成如此简单的任务。AlarmManager 完全有能力处理这个问题。

于 2012-04-06T05:55:49.257 回答
1

尝试一下

并第一次使用 -

尝试另一个

于 2012-04-06T06:28:45.820 回答
1

一种天真的方法是:

  1. 启动将始终运行的上下文,例如Service中的Thread
  2. 使用Date计算您希望下一个警报响起的时间的时间戳,并将其放入“long alertTimestamp”中。
  3. 在一个循环中,立即使用Date计算时间戳并将其放入 "long nowTimestamp" 中。
  4. 如果 nowTimestamp < alertTimestamp,让线程休眠(alertTimestamp - nowTimestamp)。
  5. 否则发出警报并重新计算警报时间戳,重复。

确保你优雅地捕捉到通知中断,这是中止计时器的关键。

希望这会有所帮助。

于 2012-04-06T06:50:46.720 回答
1

对于每 30 分钟重复一次,您需要将其添加到您的代码中:

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000*60*30, pendingIntent); //millisecs*seconds*minutes

但我还没有弄清楚如何在特定时间开始。

于 2013-12-08T13:38:56.323 回答