如何在星期三下午 1 点(每周一次)在 Android 重复闹钟

How To Repeat Alarm On Wednesday at 1pm (Once a week) In Android

在我的 android 应用程序中,我有一个 UI 允许用户 select 一周中的第 [1-7] 天(星期日 - 星期六)和一天中的某个时间在那一天。

一旦他们select编辑了这两项,我想创建一个闹钟,在那天重复响起[每周一次]。所以,这个警报每周只触发一次。

到目前为止,我已经编写了这段代码来尝试让它工作 - 我不确定我是否做对了,因为它没有触发:

private void setAlarmClock(){
    AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.DAY_OF_WEEK, [userSelectedDay]);
    calendar.set(Calendar.HOUR_OF_DAY, [userSelectedTime]);
    calendar.set(Calendar.MINUTE, [userSelectedMinutes]);

    manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY * 7, pendingIntent);

    Toast.makeText(this, "Alarm Set", Toast.LENGTH_SHORT).show();
}

此外,我该如何播放声音来真正提醒用户?

到目前为止,我通读的所有 SO 问题都没有帮助。

提前致谢。

您可以像这样播放默认的闹钟声音,例如:

Uri alarmTone = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
Ringtone ringtoneAlarm = RingtoneManager.getRingtone(getApplicationContext(), alarmTone);
ringtoneAlarm.setStreamType(AudioManager.STREAM_ALARM);
ringtoneAlarm.play();

现为the documentation states, when using setInexactRepeating() you have to use one of the internal constants

  • INTERVAL_DAY
  • INTERVAL_FIFTEEN_MINUTES
  • INTERVAL_HALF_DAY
  • INTERVAL_HALF_HOUR
  • INTERVAL_HOUR

因此,如果您想在一周(或任何其他非标准间隔)内重复,则必须改用 setRepeating()