2009-02-26 8 views
6

En mi programa Android, tengo un código que descarga un archivo. Esto funciona bien, pero desde un teléfono celular, puede desconectarse en cualquier momento, necesito cambiarlo, reconecte y reanuda la descarga cuando está a la mitad y alguien llama/pierde la recepción de la celda/etc. No puedo entender cómo detectar que InputStream ha dejado de funcionar. Ver el código de abajo:Android InputStream Internet Disconnect

InputStream in = c.getInputStream(); 

    byte[] buffer = new byte[8024]; 
    int len1 = 0; 

    while ((len1 = in.read(buffer)) > 0) { 
     Log("-"+len1+"- Downloaded."); 
     f.write(buffer,0, len1); 
     Thread.sleep(50); 
    } 

Cuando pierdo la conexión a Internet, Mi registro muestra:

Log: -8024- Downloaded. 
Log: -8024- Downloaded. 
Log: -8024- Downloaded. 
Log: -8024- Downloaded. 
Log: -6024- Downloaded. (some lower number) 

Y entonces mi programa simplemente se cuelga en el tiempo ((= LEN1 etc. necesito para que así sea cuando el Internet se desconecta espero a Internet para conectarse de nuevo y luego reanudar la descarga

Respuesta

1

Echa un vistazo aquí:. http://developer.android.com/reference/java/nio/channels/SocketChannel.html

EDITAR (basado en comentario): http://www.jguru.com/faq/view.jsp?EID=72378

Pensamientos basados ​​en lo anterior .... puede colocar la lectura en un hilo y verificar periódicamente si el hilo ha dejado de leer datos (probablemente, actualice una variable compartida). Si ha matado a la conexión y el hilo y lidiar con él como lo necesite.

Otra alternativa es no utilizar HTTPURLConnection y ocuparse de los bits que necesita.

+1

Hola, gracias pero tengo una conexión HTTPURL - ¿cómo se obtiene el SocketChannel de eso? Gracias, –