将整数值传递给广播接收器 class
Passing Integer Value to Broadcast Receiver class
我正在尝试使用时间选择器从用户那里获取开始时间和停止时间 class,然后将这个时间传递给广播 class。
但是当我使用 toast 消息检查广播接收器 class 中的开始时间和停止时间的值是否达到时,我无法获得所需的开始时间或停止时间即通过。
代码[主要Class]:
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);
}
广播Class:
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();
程序说明:我在主class中的onTimeSet方法中通过了startHour和startMinute来广播class。
在广播中 Class 我将这个 startHour 和 StopMinute 存储在上面定义的变量中。
这里的问题是您在 onCreate
中创建警报,然后在 onClick
中更新您的信息。我很确定您的 pendingIntent
声明需要在您向 alarmIntent
.
提供信息之后进行
编辑:我会在更新 alarmIntent
后立即重新创建 pendingIntent
,然后再次调用 alarmRepeat()
。就个人而言,我会将 pendingIntent
的赋值放在警报方法中并将 alarmIntent
作为参数传入,但这是一种风格选择。
只要未决意图相同(不包括添加到其中的意图的额外内容)alarmmanager 将用新警报覆盖任何现有警报
我正在尝试使用时间选择器从用户那里获取开始时间和停止时间 class,然后将这个时间传递给广播 class。
但是当我使用 toast 消息检查广播接收器 class 中的开始时间和停止时间的值是否达到时,我无法获得所需的开始时间或停止时间即通过。
代码[主要Class]:
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);
}
广播Class:
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();
程序说明:我在主class中的onTimeSet方法中通过了startHour和startMinute来广播class。
在广播中 Class 我将这个 startHour 和 StopMinute 存储在上面定义的变量中。
这里的问题是您在 onCreate
中创建警报,然后在 onClick
中更新您的信息。我很确定您的 pendingIntent
声明需要在您向 alarmIntent
.
编辑:我会在更新 alarmIntent
后立即重新创建 pendingIntent
,然后再次调用 alarmRepeat()
。就个人而言,我会将 pendingIntent
的赋值放在警报方法中并将 alarmIntent
作为参数传入,但这是一种风格选择。
只要未决意图相同(不包括添加到其中的意图的额外内容)alarmmanager 将用新警报覆盖任何现有警报