0

接続の変更をリッスンする単純なブロードキャスト レシーバーがあり、ネットワークが利用可能であれば、短期間のサービスを開始する繰り返しアラームを設定します。ネットワーク接続がない場合は、繰り返し発生するアラームが無効になります。

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 を求めようとしていました。

4

2 に答える 2

1

これはやや古い質問であることは知っていますが、とにかく検討したいと思いました。たとえば、デバイスが接続なしから接続に切り替わるなど、起動するたびに接続が変更される可能性は十分にあります。したがって、デバイスが起動するたびにコードが実行されます。

于 2012-11-19T14:26:34.410 に答える
0

RECEIVE_BOOT_COMPLETED が許可として要求されていない場合でも制御を取得する BOOT_COMPLETED ブロードキャスト レシーバーを登録できます。

バグはすでにここで報告されています

このSOスレッドを確認することもできます

于 2012-06-05T09:40:25.757 に答える