android - 在 android 上使用给定时间使用 AlarmManager 安排闹钟

标签 android alarmmanager simpledateformat

我想使用来 self 的 GUI 的输入通过 AlarmManager 安排警报。

例如,我希望闹钟在 18:15 响起,所以我有 2 个代表小时和分钟的 int 变量。我尝试用 SimpleDateFormat 解析它们,但它似乎不起作用。任何想法为什么?

编辑:问题是警报似乎没有触发。我猜这是因为自卫队没有按照我的意愿行事。但我不知道如何修复它。

public void setAlarm(){

    int hour = 18;
    int minute = 15;
    String myTime = String.valueOf(hour) + ":" + String.valueOf(minute);

    Date date = null;

    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
    try {

        date = sdf.parse(myTime);

    } catch (ParseException e) {

        e.printStackTrace();
    }

    if (date != null) {
        timeInMs = date.getTime() + System.currentTimeMillis();
    }

    Intent intent = new Intent(this, AlarmClockRingRing.class);
    PendingIntent action = PendingIntent.getActivity(this, 0,intent, 0);

    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
    am.set(AlarmManager.RTC_WAKEUP, timeInMs, action);
}

感谢任何帮助。

马库斯

最佳答案

您这样做的方式是将闹钟设置为距当前时间 18 小时 15 分钟,而不是今天的 18 点 15 分。

解决此问题的一种方法是创建一个具有当前时间但具有所需小时和分钟值的日期。然后只需在该日期设置闹钟即可。像这样:

    public void setAlarm(){

    int hour = 18;
    int minute = 15;
    String myTime = String.valueOf(hour) + ":" + String.valueOf(minute);

    Date date = null;

    // today at your defined time Calendar    
    Calendar customCalendar = new GregorianCalendar();
    // set hours and minutes
    customCalendar.set(Calendar.HOUR_OF_DAY, hour);
    customCalendar.set(Calendar.MINUTE, minute);
    customCalendar.set(Calendar.SECOND, 0);
    customCalendar.set(Calendar.MILLISECOND, 0);

    Date customDate = customCalendar.getTime();

    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm", Locale.getDefault());
    try {

        date = sdf.parse(myTime);

    } catch (ParseException e) {

        e.printStackTrace();
    } catch (java.text.ParseException e) {
        e.printStackTrace();
    }

    if (date != null) {
        timeInMs = customDate.getTime();
    }

    Intent intent = new Intent(this, AlarmClockRingRing.class);
    PendingIntent action = PendingIntent.getActivity(this, 0,intent, Intent.FLAG_ACTIVITY_NEW_TASK);

    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
    am.set(AlarmManager.RTC_WAKEUP, timeInMs, action);
}

此代码将在当天的 18 点 15 分发出警报。小心设置一个已经过去的日期。确保你设置了一个 future 的时间。

关于android - 在 android 上使用给定时间使用 AlarmManager 安排闹钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25951156/

相关文章:

android - 为 ExpandableListView 创建布局

Android 应用程序, Activity 状态(运行、未运行、前台/后台)

java - 我想设置一个通知,当我收到通知时它应该响铃

java - AlarmManager 在 Android 中不工作

日期 "Wednesday, January 2, 2013 5:29:26 PM +02:00"的 Java 日期格式字符串

java - 日期格式化java中kk和HH的区别

java - 错误 :- Execution failed for task ':app:dexDebug' in android studio

android - 在一个 BroadcastReceiver (Android) 中接收和发送 SMS

java - AlarmManager 和服务无法在我的应用程序上运行

Java SimpleDateFormat 使用具有欢乐性格的模式