Android InputStream Internet Disconnect

En mi programa de Android, tengo un código que descarga un archivo. Esto funciona bien, pero dado que en un teléfono celular, puede desconectarse en cualquier momento, necesito cambiarlo, volver a conectarlo y reanudar la descarga cuando está a mitad de camino y alguien llama / pierde la recepción del celular / etc. No puedo entender cómo detectar que InputStream ha dejado de funcionar. Vea el código a continuación:

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 luego mi programa simplemente se cuelga en el tiempo ((len1 = etc. Necesito hacerlo así que cuando Internet se desconecta, espero a que Internet se conecte nuevamente y luego reanudo la descarga.

Respuestas a la pregunta(1)

Su respuesta a la pregunta