デバイスが完全なインターネット アクセスを持っているかどうか、つまり、ユーザーがキャプティブ ポータル(ウォールド ガーデンとも呼ばれる) に限定されていないかどうか、つまり、ユーザーが完全にアクセスするためにフォームで資格情報を送信することを強制する制限されたサブネットではないことを確実に検出する必要があります。アクセス。
私のアプリは認証プロセスを自動化しているため、ログオン アクティビティを開始する前に、完全なインターネット アクセスが利用できないことを知っておくことが重要です。
問題は、ネットワーク インターフェイスが稼働しており、接続状態にあることを確認する方法ではありません。これは、サンドボックス化されたイントラネット セグメントではなく、デバイスが無制限のインターネット アクセスを持っていることを確認することです。
HTTP 200
すべての要求がログイン ページにルーティングされるため、既知のホストに接続しても例外はスローされず、有効な応答コードが返されるため、これまでに試したすべてのアプローチが失敗しました。
ここに私が試したすべてのアプローチがありますが、上記の理由ではtrue
なく、すべて返されます。false
1:
InetAddress.getByName(host).isReachable(TIMEOUT_IN_MILLISECONDS);
isConnected = true; <exception not thrown>
2:
Socket socket = new Socket();
SocketAddress sockaddr = new InetSocketAddress(InetAddress.getByName(host), 80);
socket.connect(sockaddr, pingTimeout);
isConnected = socket.isConnected();
3:
URL url = new URL(hostUrl));
URLConnection urlConn = url.openConnection();
HttpURLConnection httpConn = (HttpURLConnection) urlConn;
httpConn.setAllowUserInteraction(false);
httpConn.setRequestMethod("GET");
httpConn.connect();
responseCode = httpConn.getResponseCode();
isConnected = responseCode == HttpURLConnection.HTTP_OK;
では、ログイン リダイレクト ページではなく、実際のホストに接続していることを確認するにはどうすればよいでしょうか? 明らかに、使用している「ping」ホストからの実際の応答本文を確認できましたが、適切な解決策のようには見えません。