11

私のアプリケーションはHttpURLConnection、REST サービスに接続するために使用します。エラーをログに記録したところ、時折発生するのは、ユーザーが WiFi 接続を取得しているが、プロキシがあることに気付きました。

たとえば、有料ページにリダイレクトしてからインターネットを使用できるようにする空港の Wi-Fi です。私のコードはリダイレクトに従いません。

私が本当に望んでいるのは、WiFi の存在を無視し、3G/4G/E を介した通信を強制することです。どうすればAndroidでそれを行うことができますか?

4

2 に答える 2

8

モバイル ネットワークに切り替える:

プロキシを検出するとすぐに、アプリがそのネットワークを使用できないため、モバイル ネットワークに切り替えることをユーザーに通知するダイアログがポップアップ表示されます。ConnectivityManagerクラスを使用してモバイルネットワークに切り替えることができます。

ConnectivityManager cm; 
cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
cm.setNetworkPreference(ConnectivityManager.TYPE_MOBILE);

完了したら、デフォルトに戻します。

cm.setNetworkPreference(ConnectivityManager.DEFAULT_NETWORK_PREFERENCE);

プロキシを検出します。

次のスニペットを使用してプロキシを検出します

HttpURLConnection conn;
...
if (conn.getResponseCode() == HTTP_PROXY_AUTH){
    // You got a '407: Proxy authentication required' response.
    // Set the networkPreference() here and retry when 
    // network connection changes to TYPE_MOBILE.
}

この投稿をチェックして、プロキシ経由で HttpURLConnection を使用する方法を確認できます: How do I make HttpURLConnection use a proxy?

「ネットワークの変更」を検出します。

「ネットワークの変化」を検出する方法を知るには、次の投稿を参照してください: Android、データのポーリング中にネットワークの変更を処理する方法 (GPRS から Wi-fi へ、またはその逆)

アップデート:

ダイアログを表示できない場合は、少なくともステータス バーを送信してNotification、ユーザーが後でネットワーク スイッチについて知ることができるようにします。

于 2012-06-22T16:00:20.567 に答える
1

あなたの活動において、あなたがあなたのウェブサービスに電話をかけようとするときはいつでも

WIFIが有効になっている場合は、無効にするだけです。このようなもののためにインターネット上で利用可能な多くのコードスニペットがあります

また、モバイルデータネットワークが利用可能かどうかを確認し、利用可能な場合は電話をかけます。そうでない場合は、このアプリがタスクを実行するためにモバイルデータネットワークが必要であることをユーザーに示します。

HTTP呼び出しが完了するとすぐに、WIFIを再びオンにします。

于 2012-06-23T05:44:56.640 に答える