Wifi 接続が回復するときに、アクションNETWORK_STATE_CHANGED_ACTION
(定数値は ) を 含むブロードキャスト インテントのみを持つのは正常ですか? android.net.wifi.STATE_CHANGE
つまり、Wifi が切断されている場合、この意図は得られません。
更新:私は主に >= 2.2 Froyo に興味があります
Wifi 接続が回復するときに、アクションNETWORK_STATE_CHANGED_ACTION
(定数値は ) を 含むブロードキャスト インテントのみを持つのは正常ですか? android.net.wifi.STATE_CHANGE
つまり、Wifi が切断されている場合、この意図は得られません。
更新:私は主に >= 2.2 Froyo に興味があります
public static final 文字列 SUPPLICANT_CONNECTION_CHANGE_ACTION
以来: API レベル 1
サプリカントへの接続が確立されたこと (および Wi-Fi 操作を実行できるようになったこと) またはサプリカントへの接続が失われたことを示すブロードキャスト インテント アクション。もう 1 つのエクストラは、接続状態をブール値として提供します。true は CONNECTED を意味します。
関連項目
EXTRA_SUPPLICANT_CONNECTED
定数値: 「android.net.wifi.supplicant.CONNECTION_CHANGE」
Android の API では、ネットワーク接続について STATE_CHANGE をチェックするのは得策ではなく、代わりに SUPPLICANT_CONNECTION_CHANGE_ACTION を使用する必要があると書かれています。これにより、wifi ネットワークへの確立と、wifi ネットワークの切断が通知されます。これがあなたの助けになるかどうかはわかりませんが、そう願っています。リンク
私のプロジェクトでも同様のニーズがあり、最終的に両方を使用する必要がありました。
android.net.wifi.supplicant.CONNECTION_CHANGE アクションは、ネットワークが接続されたときにブロードキャストを送信しますが、通常はデバイスが IP アドレスを取得する前に送信されるため、そのために android.net.wifi.STATE_CHANGE アクションが必要でした。
android.net.wifi.STATE_CHANGE アクションは、デバイスがネットワークから切断されている場合にのみ、切断時にブロードキャストを受信しますが、wifi は引き続き有効になっています (たとえば、ホットスポットが範囲外になった場合)。
したがって、レシーバーの両方のアクションをマニフェストに入れる必要があります。
<receiver android:name="net.moronigranja.tproxy.WifiReceiver">
<intent-filter>
<action android:name="android.net.wifi.STATE_CHANGE"/>
<action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" />
</intent-filter>
</receiver>
そして、どのアクションがインテントで呼び出されているかを確認するために if を入れます。私のコードの BroadcastReceiver の onReceive メソッドは次のとおりです。
public void onReceive(Context c, Intent intent) {
if(intent.getAction().equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)){
boolean connected = intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false);
if(!connected) {
//Start service for disconnected state here
}
}
else if(intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)){
NetworkInfo netInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if( netInfo.isConnected() )
{
//Start service for connected state here.
}
}
}