Web サービスに接続するアプリケーションがあります。アプリケーションのライフサイクルの間、自分の接続タイプに忠実であり続ける限り、WIFI または 3G を使用して何回でも問題なく Web サービスに接続できます。それは、WIFIから3Gに切り替えない場合です。WIFI から 3G に切り替えると、もう応答がありません。接続が応答を待ち続けています。
以下の4つのシナリオを試しました。3番目のシナリオにのみ問題があります。何が問題なのですか?
第 1 のシナリオ: 接続は常に WIFI である (OK)
- アプリケーションは、WIFI を使用して Web サービスに接続します。
- 応答が正常に受信されました。
- アプリケーションは、WIFI を使用して Web サービスに再度接続します。
- 応答が正常に受信されました。
2 番目のシナリオ: 接続は常に 3G です (OK)
- アプリケーションは、WIFI を使用して Web サービスに接続します。
- 応答が正常に受信されました。
- アプリケーションは、WIFI を使用して Web サービスに再度接続します。
- 応答が正常に受信されました。
シナリオ 3: 接続が WIFI から 3G に切り替わる (無応答)
- アプリケーションは、WIFI を使用して Web サービスに接続します。
- 応答が正常に受信されました。
- 接続を 3G に切り替えました。WIFIが無効になっています。3G が有効になっています。
- アプリケーションは、3G を使用して Web サービスに再度接続します。
- 応答がないか、エラーが受信されました。アプリケーションは応答を待ち続けます。
getResponseCode
が呼び出される前に最後のログが表示されました。
シナリオ 4: 接続が 3G から WIFI に切り替わる (OK)
- アプリケーションは 3G を使用して Web サービスに接続します。
- 応答が正常に受信されました。
- 接続がWIFIに切り替わりました。3G が無効になっています。WIFI が有効になっています。
- アプリケーションは、WIFI を使用して Web サービスに再度接続します。
- 応答が正常に受信されました。
私の推測では、デフォルトでHttpURLConnection
は WIFI が 3G よりも優れた接続タイプであると考えています。そのため、接続が WIFI から 3G に切り替えられると、HttpURLConnection
は 3G の認識を拒否し、引き続き WIFI を使用して接続しようとします。一方、HttpURLConnection
WIFI の方が優れた接続タイプであるため、3G から WIFI への切り替えが可能です。私はこれで正しいですか?その場合、WIFI から 3G への切り替えを許可するにはどうすればよいですか?
以下は私のコードのスニペットです: (私は Web サービスに接続するたびに呼び出します。)
//open new connection
httpsURLConnection = (HttpURLConnection) ((new URL(url)).openConnection());
httpsURLConnection.setDoInput(isDoInput);
httpsURLConnection.setDoOutput(isDoOutput);
try
{
//supply parameters
OutputStreamWriter wr = new OutputStreamWriter(httpsURLConnection.getOutputStream());
wr.write(data);
wr.flush();
if(httpURLConnection != null)
{
if (httpsURLConnection.getResponseCode() == HttpsURLConnection.HTTP_OK) //connection hangs here
{
//some code
}
else
{
//some code
}
}
}catch(Exception e)
{
}