Java 将整数值传递给广播接收器类
我试图从一个类中使用时间选择器的用户那里获取开始时间和停止时间,然后将此时间传递给广播类 但是,当我使用toast消息检查广播接收器类中是否达到了start time和stop time的值时,我无法获得所需的开始时间或停止时间 代码[主类]:Java 将整数值传递给广播接收器类,java,android,android-intent,broadcastreceiver,android-timepicker,Java,Android,Android Intent,Broadcastreceiver,Android Timepicker,我试图从一个类中使用时间选择器的用户那里获取开始时间和停止时间,然后将此时间传递给广播类 但是,当我使用toast消息检查广播接收器类中是否达到了start time和stop time的值时,我无法获得所需的开始时间或停止时间 代码[主类]: protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceSta
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.setting);
initialize();
alarmIntent = new Intent(Settings.this, AlarmReceiver.class);
pendingIntent = PendingIntent.getBroadcast(Settings.this, 0, alarmIntent, PendingIntent.FLAG_CANCEL_CURRENT);
alarmRepeat();
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Calendar c = Calendar.getInstance();
switch(v.getId()){
case R.id.startTime :
// Process to get Current Time
startHour = c.get(Calendar.HOUR_OF_DAY);
startMinute = c.get(Calendar.MINUTE);
// Launch Time Picker Dialog
TimePickerDialog tpd1 = new TimePickerDialog(this,
new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay,
int minute) {
// Display Selected time in textbox
eStart.setText(hourOfDay + ":" + minute);
startHour = hourOfDay;
startMinute = minute;
alarmIntent.putExtra("startHour", startHour);
alarmIntent.putExtra("startMinute", startMinute);//passing these variables to Broadcast class
}
}, startHour, startMinute, false);
tpd1.show();
public void alarmRepeat(){
Calendar cal = Calendar.getInstance();
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
manager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 1000, pendingIntent);
}
广播类:
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
startHour = intent.getIntExtra("startHour", 0);
stopHour = intent.getIntExtra("StopHour", 0);
Toast.makeText(context, startHour + ":" + startMinute, Toast.LENGTH_LONG).show();
节目解释:我已将主类中的onTimeSet方法的startHour和startMinute传递给广播类
在广播类中,我将此startHour和StopMinute存储在上面定义的变量中。这里的问题是,您正在
onCreate
中创建报警,然后在onClick
中更新信息。我很确定,在您向alarmIntent
提供信息之后,您的PendingEvent
声明需要完成
编辑:我会在更新alarmIntent
后立即重新创建PendingContent
,然后再次调用alarmRepeat()
。就我个人而言,我会将pendingent
的赋值放在报警方法中,并将alarmIntent
作为参数传入,但这是一种风格选择
只要待处理的意图相同(不包括添加到意图中的额外内容),alarmmanager就会用新的警报覆盖任何现有警报是的,基本上这是一个难题。但是,如何从onClick()方法调用广播类呢?我不确定
alarmRepeat()
做了什么,所以我不确定为什么需要在onCreate()中创建意图。您是否正在使用AlarmManager
广播意图?如果是这样,您可以在onClick
中覆盖现有报警。我现在在车上,但我可以在回家后编写一些示例代码。我编辑了问题并添加了alarmRepeat()函数。如果我将在onClick()函数中调用广播意图,那么我应该在哪里调用,因为startHour和startMinute的值也是在时间选择器设置值之后才定义的。我实际上没有得到它。如果我没有错的话,那么你是说每当我在意图中添加额外的东西时,我应该再次调用pendingent()和alrmRepeat()?没错。以相同的基本挂起意图再次创建报警将覆盖现有报警。因此,假设您需要在用户输入任何内容之前创建警报,这将是一种方法。如果在用户输入内容之前不需要创建报警,那么我只会将其放入onTimeSet
。