将整数值传递给广播接收器 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 将用新警报覆盖任何现有警报