ListView
ただし、アラームが「鳴る」/受信されたら、アクティブなアクティビティで自分を更新したいと思います。のアクティビティは1つだけListView
です。
アラームを受信したら、メインアクティビティクラスで更新UIメソッドを実行するにはどうすればよいですか?()クラスからこれonReceive()
をどのように呼び出しますかAlarmReceiver
extends BroadcastReceiver
ListView
ただし、アラームが「鳴る」/受信されたら、アクティブなアクティビティで自分を更新したいと思います。のアクティビティは1つだけListView
です。
アラームを受信したら、メインアクティビティクラスで更新UIメソッドを実行するにはどうすればよいですか?()クラスからこれonReceive()
をどのように呼び出しますかAlarmReceiver
extends BroadcastReceiver
最も簡単な方法は、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
}
});