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.
- ¿Hacer de un dispositivo móvil un control remoto para una tableta?
- Escanear Wi-Fi de Android: Filtrar impresoras de ScanResult
- Evitar que el WiFi se apague
- Detectar Si no hay conexión a Internet
- Cómo ejecutar wifi peer to peer aplicación en el emulador de 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)
- Detenga la conexión de Android a ciertas redes wifi
- Inicie el navegador predeterminado desde el navegador de portal cautivo de Android (CaptivePortalLogin)
- Construir una configuración Wifi desde un ScanResult o: Interpretar la cadena 'capabilities' de ScanResult
- Cómo crear y leer configuraciones WEP / EAP WiFi de forma programática en Android?
- Detectar si la conexión es wifi, 3G o EDGE en android?
- Datos de enlace descendente de la ruta de Android vía WiFi y datos de enlace ascendente a través de la red móvil
- Aumento de la velocidad de análisis WiFi
- Wi-Fi Android punto de acceso - sin Internet
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?