Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将整数值传递给广播接收器类_Java_Android_Android Intent_Broadcastreceiver_Android Timepicker - Fatal编程技术网

Java 将整数值传递给广播接收器类

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

我试图从一个类中使用时间选择器的用户那里获取开始时间和停止时间,然后将此时间传递给广播类

但是,当我使用toast消息检查广播接收器类中是否达到了start time和stop time的值时,我无法获得所需的开始时间或停止时间

代码[主类]:

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