接続の変更をリッスンする単純なブロードキャスト レシーバーがあり、ネットワークが利用可能であれば、短期間のサービスを開始する繰り返しアラームを設定します。ネットワーク接続がない場合は、繰り返し発生するアラームが無効になります。
public class ConnectivityChange extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(getClass().getName(), "Connectivity changed! :/");
MyApplication app = (MyApplication ) context
.getApplicationContext();
if (app.isConnected()) {
// setup repeating alarms, since we are connected.
app.setCurrencyRatesServiceRepeatingAlarm(context);
Log.d(getClass().getName(), "Connected :D");
} else {
// cancel any repeating alarm, since we are NOT connected.
app.unsetCurrencyRatesServiceRepeatingAlarm(context);
Log.d(getClass().getName(), "Not connected :(");
}
}
}
マニフェストは次のようになります。
<receiver android:name="ConnectivityChange">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
そのすべてがうまく機能します。
ただし、このコードは、エミュレーターを再起動した後でも実行されるようです。BOOT_COMPLETE を求めているわけではありません。スナップショットからエミュレーターを復元していないことを確認しました。これは予想される動作ですか?これがどこに文書化されているかわかりません。これに遭遇したとき、私は BOOT_COMPLETE を求めようとしていました。