【问题标题】:Set alarm for several days设置几天的闹钟
【发布时间】:2016-11-19 15:57:39
【问题描述】:

我正在开发闹钟应用程序。我面临一个问题。好几天不知道怎么设置闹钟了。我已经尝试过下面的代码,但在日志中我看到了这个Wed Apr 06(没有更改任何日期,所以它应该是最近的星期二和星期五)。我做错了什么?可以隔天单独设置闹钟吗?

这是我的代码:

calendar.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY, Calendar.FRIDAY);
                //calendar.add(Calendar.DAY_OF_WEEK,Calendar.FRIDAY);
                Log.e("Point_1","Calendar " + calendar.getTime());
                calendar.set(Calendar.HOUR_OF_DAY,timePicker.getCurrentHour());
                calendar.set(Calendar.MINUTE,timePicker.getCurrentMinute());
                Intent intent1 = new Intent(MyService_alarm.this,MyReceiver_Alarm.class);
                PendingIntent pendingIntent = PendingIntent.getBroadcast(MyService_alarm.this,intent.getIntExtra("Size", 1),intent1,0);
                AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
                alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 7 * 24 * 3600 * 1000, pendingIntent);

谢谢。

【问题讨论】:

    标签: android alarmmanager


    【解决方案1】:

    这是因为您在从时间选择器设置小时和分钟之前记录时间,

    您的代码可以正常工作,但是要在日志中显示设置为警报的时间,您必须将 Log.e 移动到您将日历设置为选择器的小时和分钟后,这样您的代码应该看起来像这个:

    calendar.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY, Calendar.FRIDAY);
                //calendar.add(Calendar.DAY_OF_WEEK,Calendar.FRIDAY);
                calendar.set(Calendar.HOUR_OF_DAY,timePicker.getCurrentHour());
                calendar.set(Calendar.MINUTE,timePicker.getCurrentMinute());
                Log.e("Point_1","Calendar " + calendar.getTime());
                Intent intent1 = new Intent(MyService_alarm.this,MyReceiver_Alarm.class);
                PendingIntent pendingIntent = PendingIntent.getBroadcast(MyService_alarm.this,intent.getIntExtra("Size", 1),intent1,0);
                AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
                alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 7 * 24 * 3600 * 1000, pendingIntent);
    

    此外,由于您要发出几天的警报,因此明智的做法是保存所有设置的警报并添加接收器以检测设备何时启动,因为您的警报在重新启动时被取消并且需要再次添加.

    【讨论】:

    • 感谢您的回复。不幸的是,问题是我不能一次设置好几天的闹钟。
    • 连续几天报警是什么意思?我似乎不明白你想要达到什么目的,你想要一个多天的闹钟吗?如果是的话,你需要为每一天分别设置一个闹钟
    • 那么,我不能只添加 Calendar.add(Calendar.DAY_OF_WEEK,Calendar.FRIDAY) 和 Calendar.add(Calendar.DAY_OF_WEEK,Calendar.SUNDAY) 来设置这些天的闹钟吗?
    • 请注意,Calendar.add((int field,int amount) 不会在日历中添加日期,而是在现有日期中添加指定的金额,日历实例只保存一个日期时间,但您可以做的是使用calendar.set() 将日历设置为 date1,然后使用该日期添加闹钟,然后使用 calendar.set() 再次将其设置为 date2,然后再次添加闹钟。查看此说明以更好地理解 tutorialspoint.com/java/util/calendar_add.htm
    • @Steve 您也正在使用 AlarmManager.setRepeating() 它将警报设置为指定时间,然后根据您指示为“7 * 24 * 3600 * 1000”的指定间隔重复自身我不确定这是否是您想要的,但设置一次性闹钟使用.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 60 * 1000, alarmIntent);
    【解决方案2】:

    线

    calendar.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY, Calendar.FRIDAY);
    

    不正确。如果您查看documentation,您会发现没有这种方法。

    通过写Calendar.DAY_OF_WEEK,您是在告诉系统您正在输入某个值作为星期几。但是,您输入的不是特定的一天。 Calendar 对象用于存储一个特定日期。

    因此,为了设置几天的闹钟,您需要分别设置每个闹钟。出于这个原因,您可以创建单独的Calendar 对象或通过更改时间重用一个对象。但是,两个警报的接收器类别相同。因此,您需要创建不同的待处理意图以使警报管理器区分它们。出于这个原因,我向您展示了具有不同 request_code 的示例。

    calendar1.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
    calendar2.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
    
    calendar1.set(Calendar.HOUR_OF_DAY, timePicker.getCurrentHour());
    calendar1.set(Calendar.MINUTE, timePicker.getCurrentMinute());
    
    calendar2.set(Calendar.HOUR_OF_DAY, timePicker.getCurrentHour());
    calendar2.set(Calendar.MINUTE, timePicker.getCurrentMinute());
    
    Intent intent1 = new Intent(MyService_alarm.this, MyReceiver_Alarm.class);
    PendingIntent pendingIntent1 = PendingIntent.getBroadcast(MyService_alarm.this, 1, intent1, 0);
    PendingIntent pendingIntent2 = PendingIntent.getBroadcast(MyService_alarm.this, 2, intent1, 0);
    
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.setRepeating(AlarmManager.RTC, calendar1.getTimeInMillis(), 7 * 24 * 3600 * 1000, pendingIntent1);
    alarmManager.setRepeating(AlarmManager.RTC, calendar2.getTimeInMillis(), 7 * 24 * 3600 * 1000, pendingIntent2);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-19
      • 1970-01-01
      • 1970-01-01
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多