我有一个服务..我必须在时间选择器的时间生成通知..它正在使用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);
答案 0 :(得分:2)
替换它:
mcurrentTime.set(Calendar.HOUR, selectedHour);
用这个:
mcurrentTime.set(Calendar.HOUR_OF_DAY, selectedHour);
Calendar.HOUR严格限制为12小时。
获取和设置的字段编号,表示上午或 下午。小时用于12小时制(0 - 11)。中午和 午夜由0表示,而不是由12表示。例如,在10:04:15.250 PM 小时是10。
答案 1 :(得分:1)
尝试使用setExact
代替set
。
set
javadoc中有一段:
注意:从API 19开始,传递给此方法的触发时间被视为不精确:警报将不会在此时间之前传递,但可能会延迟并在稍后传递。操作系统将使用此策略以便批量处理"在整个系统中一起报警,最大限度地减少设备需要“唤醒”的次数。并尽量减少电池使用。一般而言,只要将来安排的警报很长,就不会推迟在不久的将来安排的警报。
答案 2 :(得分:-1)