【问题标题】:AlarmManager not working with time pickerAlarmManager 不能与时间选择器一起使用
【发布时间】:2015-04-23 09:03:25
【问题描述】:

我有一个服务..我必须在时间选择器中生成通知..它与System.currentTimeMillis()一起工作,但如果我从时间选择器中花费时间则不会

这是我在点击 textView 时显示的时间选择器:

 tv.setOnClickListener(new OnClickListener() {
  @Override
 public void onClick(View v) {
  // TODO Auto-generated method stub
  mcurrentTime = Calendar.getInstance();
  int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY);
  int minute = mcurrentTime.get(Calendar.MINUTE);
  TimePickerDialog mTimePicker;
  mTimePicker = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
  @Override
 public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
  timePicker.setIs24HourView(true);
  //tv.setText( selectedHour + " : " + selectedMinute);  
  mcurrentTime.set(Calendar.HOUR,selectedHour);
  mcurrentTime.set(Calendar.MINUTE,selectedMinute);
  mcurrentTime.set(Calendar.SECOND,0);
  // HERE I AM GETTING TIME FROM TIMEPICKER
  l= mcurrentTime.getTimeInMillis();
  tv.setText(String.valueOf(l));
  }
 }, hour, minute, true);//Yes 24 hour tim
  mTimePicker.setTitle("Select Time");
  mTimePicker.show();

  }
 });

这是按钮点击的代码,在这个点击我正在启动服务:

 Intent myIntent = new Intent(MainActivity.this, MyReceiver.class);
 int randomPIN = (int)(Math.random()*9000)+1000;
 pendingIntent = PendingIntent.getBroadcast(MainActivity.this, randomPIN, myIntent,pendingIntent.FLAG_ONE_SHOT);
 AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
 //HERE I am entering the time from time picker
 alarmManager.set(AlarmManager.RTC, l , pendingIntent);

【问题讨论】:

  • 放置一些日志会有所帮助,无论您是否收到选定的时间。

标签: android android-service alarmmanager android-pendingintent android-timepicker


【解决方案1】:

替换这个:

mcurrentTime.set(Calendar.HOUR, selectedHour);

用这个:

mcurrentTime.set(Calendar.HOUR_OF_DAY, selectedHour);

Calendar.HOUR 严格为 12 小时。

根据Documentation

get 和 set 的字段编号,指示早上的时间或 下午。 HOUR 用于 12 小时制 (0 - 11)。中午和 午夜用 0 表示,而不是 12。例如,在晚上 10:04:15.250 HOUR 是 10。

【讨论】:

  • 谢谢 dhaval.. 救了我的命 :) :)
【解决方案2】:

尝试setExact 而不是set

setjavadoc中有一段:

注意:从 API 19 开始,传递给此方法的触发时间被视为不精确:在此时间之前不会发送警报,但可能会延迟并在一段时间后发送。操作系统将使用此策略在整个系统中“批量”发出警报,从而最大限度地减少设备需要“唤醒”的次数并最大限度地减少电池使用量。一般来说,安排在近期的警报不会被推迟,只要安排在很远的将来的警报。

【讨论】:

  • 这并不能解释为什么在没有TimePickerDialog 的情况下手动设置时间时会起作用。
【解决方案3】:

【讨论】:

    猜你喜欢
    • 2017-04-22
    • 2019-09-20
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 2021-07-27
    • 1970-01-01
    相关资源
    最近更新 更多