0

我使用以下示例实现了重复警报

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

收到警报后,如何在主活动类中执行更新 UI 方法?您如何onReceive()AlarmReceiver( extends BroadcastReceiver) 类中调用它

4

1 回答 1

9

最简单的方法是让您的 AlarmReceiver 成为您活动的内部类。这样,它将可以访问您活动的所有字段和方法。如果您不在其他任何地方使用它,它也可能是匿名的。要使其仅在活动时更新您的活动,请在 中注册您的接收器onResume()并在 中取消注册onPause()。请注意您将响应的IntentFilter指定意图操作。BroadcastReceiver

例子:

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
    }     
});
于 2013-01-16T18:11:12.430 回答