Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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
Android 使用BroadcastReceiver更新活动活动用户界面_Android_Android Intent_Android Broadcast - Fatal编程技术网

Android 使用BroadcastReceiver更新活动活动用户界面

Android 使用BroadcastReceiver更新活动活动用户界面,android,android-intent,android-broadcast,Android,Android Intent,Android Broadcast,我使用以下方法实现了重复报警 但是,一旦报警响起/收到报警,我想在活动活动中更新我的ListView。我只有一个具有ListView的活动 收到报警后,如何在主活动类中执行更新UI方法?如何从AlarmReceiver extends BroadcastReceiver类中的onReceive调用此函数?最简单的方法是使AlarmReceiver成为活动的内部类。这样它就可以访问您活动的所有字段和方法。如果你不在其他地方使用它,它也可以是匿名的。 要使其仅在活动时更新您的活动,请在onResum

我使用以下方法实现了重复报警

但是,一旦报警响起/收到报警,我想在活动活动中更新我的ListView。我只有一个具有ListView的活动


收到报警后,如何在主活动类中执行更新UI方法?如何从AlarmReceiver extends BroadcastReceiver类中的onReceive调用此函数?最简单的方法是使AlarmReceiver成为活动的内部类。这样它就可以访问您活动的所有字段和方法。如果你不在其他地方使用它,它也可以是匿名的。 要使其仅在活动时更新您的活动,请在onResume中注册您的接收者,并在onPause中注销它。请注意指定BroadcastReceiver将响应的意图操作的IntentFilter

例如:

private BroadcastReceiver updateReceiver;

//...

@Override
protected void onResume() {
    super.onResume();

    updateReceiver=new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            //your list update code here
        }
    };
    IntentFilter updateIntentFilter=new IntentFilter("update");
    registerReceiver(updateReceiver, updateIntentFilter);
}

@Override
protected void onPause() {
    super.onPause();

    if (this.updateReceiver!=null)
        unregisterReceiver(updateReceiver);
}
如果仍希望AlarmReceiver是一个单独的类,请在初始化期间向其传递某种回调:

public interface AlarmReceiverCallback {
    public void onAlarmReceived(Intent intent);
}

//in your AlarmReceiver class:
private AlarmReceiverCallback callback;

public AlarmReceiver(AlarmReceiverCallback callback) {
    this.callback=callback;
}

@Override
public void onReceive(Context context, Intent intent) {
    callback.onAlarmReceived(intent);
}
AlarmReceiver的初始化如下所示:

updateReceiver=new AlarmReceiver(new AlarmReceiverCallback() {
    @Override
    public void onAlarmReceived(Intent intent) {
        //your list update code here
    }     
});

如果我使用第一种方法,如何设置周期性报警?我已经尝试了“setRecurringAlarm”,从最初的链接修改它,每5秒设置一次警报。它与单独的广播接收器类一起工作。它如何与内部类一起工作?@Santiago在注册BroadcastReceiver时,可以传递IntentFilter实例,指定接收方将响应更新的操作(在我的示例中)。因此,现在,当您为警报准备Intent时,请将其操作设置为与IntentFilter指定的相同,即更新,这样就可以了。谢谢!我不知道设置动作的方法。它现在工作了。@deville我一直在我的手机上测试它,不幸的是,在睡眠期间没有收到警报。例如,如果我每天设置警报,并且设备处于唤醒状态,我可以看到警报已收到,并且我的列表已更新。但如果我在手机上测试并在大约一小时后检查应用程序,列表不会更新,警报也不会收到。@3amoura如果看不到代码,很难判断,但一般情况下,广播接收器不会这样使用。