我正在尝试使用警报管理器在特定时间设置警报,但警报会立即启动?

Posted

技术标签:

【中文标题】我正在尝试使用警报管理器在特定时间设置警报,但警报会立即启动?【英文标题】:I am trying to set alarm on specific time using alarm manager but alarm initiated instantly? 【发布时间】:2013-07-29 18:16:30 【问题描述】:

这是我的 onclick() 函数。这将设置目标警报

SA=(按钮)findViewById(R.id.button1); SA.setOnClickListener(new OnClickListener() @SuppressWarnings("弃用") @覆盖 公共无效 onClick(查看 v) 显示对话(id); ); @覆盖 受保护的对话 onCreateDialog(int id1) 开关(id1) 案例ID: // 设置时间选择器为当前时间 返回新的 TimePickerDialog(这个, timePickerListener,小时,分钟,假); 返回空值; 私人 TimePickerDialog.OnTimeSetListener timePickerListener = 新的 TimePickerDialog.OnTimeSetListener() public void onTimeSet(TimePicker view, int selectedHour, int selectedMinute) 日历 calnow=Calendar.getInstance(); calnow.setTimeInMillis(System.currentTimeMillis()); calnow.set(Calendar.HOUR_OF_DAY,selectedHour); calnow.set(Calendar.MINUTE,selectedMinute); calnow.set(Calendar.SECOND, 0); Intent intent=new Intent(getBaseContext(),alarm.class); PendingIntent pendingintent= PendingIntent.getBroadcast(getBaseContext(),0, intent, 0); AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, calnow.getTimeInMillis(),pendingintent); Toast.makeText(getBaseContext(), "报警设置", Toast.LENGTH_SHORT).show(); ; 公共无效 onReceive(上下文 arg0,意图 arg1) AlarmManager mgr = (AlarmManager)arg0.getSystemService(Context.ALARM_SERVICE); Toast.makeText(arg0,"警报开始.....", Toast.LENGTH_LONG).show();

这里的问题是,一旦我在达到目标警报之前单击按钮设置警报,我就会同时获得“警报设置”和“警报启动”。

【问题讨论】:

这里放断点,alarmManager.set(AlarmManager.RTC_WAKEUP, calnow.getTimeInMillis(),pendingintent);calnow.getTimeInMillis()的值是多少? TP 是从哪里获得时间的? 如何设置TP的值?你有没有检查过它肯定是未来的时间?您看到的结果表明这是过去或现在的时间。 @opiatefuchs TimePicker TP=new TimePicker();如果您有任何解决方案,请写信给我,因为我是 android 新手,所以请大家帮帮我 【参考方案1】:

这里的问题是,来自 TP 的值似乎是当前时间。如果您显示更多您的代码会很有帮助。让我举个例子,设置延迟 5 秒的闹钟时间。请试试这个,这是一种肮脏的方式,我只是想解释一下。这就是你所做的:

       calnow.set(Calendar.HOUR_OF_DAY,TP.getCurrentHour());
            calnow.set(Calendar.MINUTE,TP.getCurrentMinute());
          alarmManager.set(AlarmManager.RTC_WAKEUP,   calnow.getTimeInMillis(),pendingintent);

要获得五秒的延迟,请将其更改为

    alarmManager.set(AlarmManager.RTC_WAKEUP,   calnow.getTimeInMillis()+5000,pendingintent);

就像我说的,这只是为了显示您必须为 alarmManager 设置的值。它必须是您想要启动警报的时间(以毫秒为单位)。为此,您必须确保从您的 TP 中获得正确的值。因此,如果您希望我们帮助您,向我们展示完整代码将是一个好方法

【讨论】:

感谢您的帮助,我刚刚上传了新代码,请检查并帮助我【参考方案2】:

你的错在这里。就这样吧

          Calendar calnow=Calendar.getInstance()
           
            calnow.set(Calendar.HOUR_OF_DAY,selectedHour);
            calnow.set(Calendar.MINUTE,selectedMinute);
            calnow.set(Calendar.SECOND, 0);
            if (calnow.getTimeInMillis()< System.currentTimeMillis()) 
            calnow.set(Calendar.DAY_OF_YEAR, 1)
            
       

           

【讨论】:

以上是关于我正在尝试使用警报管理器在特定时间设置警报,但警报会立即启动?的主要内容,如果未能解决你的问题,请参考以下文章

在Android中,每天在特定时间设置重复警报

如果时间早于android中的当前系统时间,则会触发警报

计划通知不适用于警报应用程序

计划的警报管理器无法正常工作 Android

Python - 具有多个警报的闹钟

我可以为特定的接收器/警报设置 AlertManager repeat_interval 吗?