0

次の例を使用して、定期的なアラームを実装しました

ListViewただし、アラームが「鳴る」/受信されたら、アクティブなアクティビティで自分を更新したいと思います。のアクティビティは1つだけListViewです。

アラームを受信したら、メインアクティビティクラスで更新UIメソッドを実行するにはどうすればよいですか?()クラスからこれonReceive()をどのように呼び出しますかAlarmReceiverextends 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 に答える