ブロードキャストレシーバを使用して、電話機がWiFiアクセスポイントから切断されたことを検出しようとしています。これを行うには、私はマニフェストで私BroadcastReceiverを登録:WiFiアクセスポイントからの切断を検出しました
<receiver android:name="com.eshayne.android.WiFiBroadcastReceiver">
<intent-filter>
<action android:name="android.net.wifi.STATE_CHANGE" />
</intent-filter>
</receiver>
を私WiFiBroadcastReceiverクラスでは、私はNETWORK_STATE_CHANGED_ACTIONアクションをチェックし、NetworkInfoの詳細な状態で探しています:
if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
NetworkInfo info = (NetworkInfo)intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
android.util.Log.d("com.eshayne.android.WiFiBroadcastReceiver", "network state change - detailedState=" + info.getDetailedState() + ": " + info.toString());
if (info.getDetailedState() == DetailedState.DISCONNECTED) {
...
}
else if (info.getDetailedState() == DetailedState.CONNECTED) {
...
}
私は「問題電話機がWiFiアクセスポイントの範囲を離れると、「切断された」コールバックが6回呼び出されます。つまり、15秒に1回、かなり定期的に停止してから停止します。これまでのところ、私は各コールバックのNetworkInfo間に特徴的な区別を見つけることができませんでした。ログに書き込まれている各NetworkInfoオブジェクトは、次のようになります。
02-18 10:16:51.918 D/com.eshayne.android.WiFiBroadcastReceiver(1511): network state change - detailedState=DISCONNECTED: NetworkInfo: type: WIFI[], state: DISCONNECTED/DISCONNECTED, reason: (unspecified), extra: (none), roaming: false, failover: false, isAvailable: true
私の「接続」コールバックは「切断」のコールバックの間に呼び出されないように、それは、また、無線LANの範囲の内外放浪電話の問題ではありません。それらの間に他の状態が引き起こされることもありません。詳細状態がDISCONNECTEDである6コールバックのちょうど速いシリーズ。
私のコールバックが切断ごとに1回だけ呼び出されるように、電話機がWiFi接続を失ったときを検出する良い方法はありますか?または、私が見ている6つのコールバックのどれが「最終的な」ものかを検出する方法はありますか?
ここで問題は何ですか?あなたは、電話が最初の放送の後に再接続していないと言うとき、6のどれも他のものと比べて良いものではないのですか? –
問題は、ブロードキャストレシーバーで同じ切断処理ロジックを6回実行したくないということです。 – eshayne