Android:闹钟每30分钟播放一次,从12:30开始

时间:2012-04-06 05:38:28

标签: android service alarmmanager android-alarms

在这里,我将使用闹钟服务每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点,1点半,2点。 。 。等

那么我的代码需要做些什么改变?

5 个答案:

答案 0 :(得分:2)

在特定时间开始服务。 看到这篇文章可能有帮助:

Using Alarmmanager to start a service at specific time

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

Try it

并使用第一次 -

Try another

答案 3 :(得分:1)

一种天真的方法是:

  1. 启动始终运行的上下文,例如Thread中的Service
  2. 使用Date计算下一个警报响铃时间的时间戳,并将其置于“long alertTimestamp”中。
  3. 在循环中,使用Date立即计算时间戳,并将其放入“long nowTimestamp”。
  4. 如果nowTimestamp< alertTimestamp,将线程放到sleep for(alertTimestamp - nowTimestamp)。
  5. 否则发出警报并重新计算alertTimestamp,重复。
  6. 确保抓住通知中断,这是中止计时器的关键。

    希望这有用。

答案 4 :(得分:0)

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

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

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