【问题标题】: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 新手,所以请大家帮帮我

标签: 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)
            }
       

           

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 2014-11-26
    • 1970-01-01
    相关资源
    最近更新 更多