【问题标题】:Android: Alarm to be play every 30 minutes and it start from 12:30Android:闹钟每 30 分钟播放一次,从 12:30 开始
【发布时间】:2012-04-06 05:38:27
【问题描述】:

在这里,我将使用闹钟服务每隔 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 。 . .等等

那么我必须对我的代码进行哪些更改?

【问题讨论】:

  • 您必须创建一个将在您的应用程序后台运行的服务。因此,如果您退出应用程序,该服务将继续运行并根据您的逻辑执行您的代码。
  • @Suvam Roy 我知道这一切。但是想知道如何设置闹钟应该从12:30开始,每30分钟播放一次。
  • @iDroidExplorer : 看看这篇文章也许会有帮助Using Alarmmanager to start a service at specific time
  • @imrankhan:嘿,谢谢。我认为这将是有效的。但只是问你问题。如果我将小时设置为 12,分钟设置为 30,并且如果我在 1:29 将应用程序安装在设备中,那么它会在 1:30 播放警报吗???
  • @imrankhan:请把你的回答说出来,这样我可以接受。

标签: android service alarmmanager android-alarms


【解决方案1】:

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

Using Alarmmanager to start a service at specific time

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      Try it

      第一次使用 -

      Try another

      【讨论】:

        【解决方案4】:

        一种天真的方法是:

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

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

        希望这对您有所帮助。

        【讨论】:

          【解决方案5】:

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

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

          但我还没想好具体时间怎么开始。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-06-16
            • 1970-01-01
            相关资源
            最近更新 更多