@FlyWheel は正しい道を進んでいると思いますが、http: //clients1.google.com/generate_204 を使用します。204 が返されない場合は、キャプティブ ポータルの背後にいることがわかります。204 を取得するまでこれをループで実行できます。204 の場合、キャプティブ ポータルの背後にいないことがわかります。
@FlyWheel は次のように書いています: 唯一の欠点は、WiFi アクセス ポイントにインターネット接続がない場合に Web ログインが必要になることです。
これは、android.net.conn.CONNECTIVITY_CHANGE に受信機を登録することで解決できます。接続の Supplicant State を調べることで、Wifi がオンになっていて接続されているかどうかを確認できます。
ここにスニペットがありますが、私はそれを実行しませんでした:
WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wm.getConnectionInfo();
SupplicantState suppState = wifiInfo.getSupplicantState();
if (wm.isWifiEnabled()) {
if (suppState == SupplicantState.COMPLETED){
// TODO - while loop checking generate_204 (FlyWheels code)Using intent service.
}
}
SupplicantState が COMPLETED か ASSOCIATED かは覚えていません。確認する必要があります。ブロードキャスト レシーバの寿命は短いため、generate_204 のチェックには IntentService を使用する必要があります。