Android: 3G a WIFI cambiar mientras que en el medio en la app = pérdida de conectividad de red
Estoy corriendo en un problema molesto con HTC Legend (Android 2.2). No viendo este problema en Xperia, Galaxy, Nexus, etc.
Cuando lanzo mi aplicación en una conexión 3G, buscar algunos datos, luego entrar en la configuración del teléfono y habilitar WIFI, el teléfono obtiene automáticamente una conexión WIFI que es favorecida en 3G. El problema es que, una vez que vuelvo a la aplicación, parece que ha perdido toda la conectividad de red y no puede conectarse a nada. Sin embargo, otras aplicaciones, como el Navegador Web, por ejemplo, no tienen ningún problema con la nueva conexión Wifi. Ping funciona bien desde el shell del teléfono.
- Detectar si la conexión es wifi, 3G o EDGE en android?
- WPS Parámetros Wifi NFC y Android
- Android - Get Notified cuando se detecta un nuevo punto de acceso?
- WiFi-Comunicación directa entre Mac / Windows y Android
- ¿Cómo averiguar otro usuario conectado a la misma red WIFI con la que está en android?
Si espero lo suficiente (por ejemplo, 15 minutos), la pila de red parece repararse automáticamente y mi aplicación puede volver a realizar conexiones de red. Por supuesto, este retraso es inaceptable.
¿Hay una manera de volver a init la pila de la red de forma programática? Creo una nueva java.net.HttpURLConnection cada vez, con todo todavía épocas una vez que el WIFI se ha adquirido.
Gracias
Código:
byte[] response = null; HttpURLConnection connection = null; int responseCode = -1; // check the cache first String readyResponse = ResponseCache.getInstance().get(getUrl()); if (readyResponse != null) { Log.d(LOG_TAG, "Returning CACHED server response for " + getUrl()); return readyResponse.getBytes(); } try { URL url = new URL(getUrl()); Log.i(LOG_TAG, "Sending Request: " + url.toExternalForm()); connection = (HttpURLConnection) url.openConnection(); connection.setUseCaches(false); connection.setDoOutput(true); connection.setDoInput(true); connection.setConnectTimeout(ApplicationConfiguration.HTTP_CONNECT_TIMEOUT); connection.setReadTimeout(ApplicationConfiguration.HTTP_READ_TIMEOUT); if (BuildType.getHTTPMethod() == BuildType.METHOD_GET) { connection.setRequestMethod("GET"); } else { connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); String body = getParameters(); connection.setRequestProperty("Content-Length", Integer.toString(body.length())); OutputStreamWriter wr = new OutputStreamWriter(connection.getOutputStream()); wr.write(getParameters()); wr.flush(); } connection.connect(); responseCode = connection.getResponseCode();
Y stacktrace
E/xxx.yyy.zzz( 927): java.net.SocketTimeoutException: Read timed out E/xxx.yyy.zzz( 927): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.nativeread(Native Method) E/xxx.yyy.zzz( 927): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.access$200(OpenSSLSocketImpl.java:55) E/xxx.yyy.zzz( 927): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLInputStream.read(OpenSSLSocketImpl.java:532) E/xxx.yyy.zzz( 927): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.readln(HttpURLConnectionImpl.java:1279) E/xxx.yyy.zzz( 927): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.readServerResponse(HttpURLConnectionImpl.java:1351) E/xxx.yyy.zzz( 927): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.sendRequest(HttpURLConnectionImpl.java:1339) E/xxx.yyy.zzz( 927): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.doRequestInternal(HttpURLConnectionImpl.java:1656) E/xxx.yyy.zzz( 927): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.doRequest(HttpURLConnectionImpl.java:1649) E/xxx.yyy.zzz( 927): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:1374) E/xxx.yyy.zzz( 927): at org.apache.harmony.luni.internal.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:117) E/xxx.yyy.zzz( 927): at xxx.yyy.zzz.executeRequest(zzz.java:95)
- Devolución de llamada en el dispositivo que se conecta a Wifi Hotspot
- LocationManager devuelve la antigua ubicación en caché "Wifi" con la marca de hora actual
- Android - Por qué ConnectivityManager.isActiveNetworkMetered siempre devuelve true (incluso en Wifi)
- Cómo buscar y conectarse a una red wifi específica en Android mediante programación
- Wi-Fi Directo y "normal" Wi-Fi - ¿Diferentes MAC?
- Descubrir dispositivos móviles usando wifi
- Cree un punto de acceso con el Nexus 7
- ANDROID: si WiFi está habilitado Y activo, inicia una intención
Veo que tiene una SocketTimeoutException, tal vez usted puede capturar esta excepción y conectar con un nuevo socket?
Hay un error que hace que el sistema reutilice conexiones HTTP antiguas . Configurar la propiedad del sistema http.keepAlive a false debería resolver el problema:
System.setProperty("http.keepAlive", "false");
- Marcador de mapa de Android en Longpress se representa debajo de la zona que es realmente LongPressed (en API 15)
- ¿Cómo notificar al usuario cuando entra en alguna región usando Geoloqi API?