AlarmManager无法使用时间选择器

时间:2015-04-23 09:03:26

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

我有一个服务..我必须在时间选择器的时间生成通知..它正在使用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);

3 个答案:

答案 0 :(得分:2)

替换它:

mcurrentTime.set(Calendar.HOUR, selectedHour);

用这个:

mcurrentTime.set(Calendar.HOUR_OF_DAY, selectedHour);

Calendar.HOUR严格限制为12小时。

根据Documentation

  

获取和设置的字段编号,表示上午或   下午。小时用于12小时制(0 - 11)。中午和   午夜由0表示,而不是由12表示。例如,在10:04:15.250 PM   小时是10。

答案 1 :(得分:1)

尝试使用setExact代替set

set javadoc中有一段:

  

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

答案 2 :(得分:-1)

您可以使用意图过滤器为您的服务电话使用以下代码。

https://stackoverflow.com/questions/29818271/android-asynctask-with-alarmmanager-und-service/29818497#29818497