7 Stimmen

Android InputStream Internetverbindung unterbrechen

In meinem Android-Programm habe ich einen Code, der eine Datei herunterlädt. Das funktioniert gut, aber da auf einem Handy die Verbindung jederzeit unterbrochen werden kann, muss ich es so ändern, dass die Verbindung wiederhergestellt und der Download fortgesetzt wird, wenn man auf halbem Weg ist und jemand anruft/der Empfang unterbrochen wird/etc. Ich kann nicht herausfinden, wie man erkennt, dass der InputStream nicht mehr funktioniert. Siehe den Code unten:

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);
    }

Wenn ich die Internetverbindung verliere, wird in meinem Protokoll angezeigt:

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

Und dann bleibt mein Programm einfach an der while( (len1 = etc.) hängen. Ich muss es so einrichten, dass ich, wenn die Internetverbindung unterbrochen wird, warte, bis das Internet wieder verbunden ist, und dann den Download fortsetze.

3voto

TofuBeer Punkte 59410

Schauen Sie hier nach: http://developer.Android.com/reference/java/nio/channels/SocketChannel.html

EDIT (aufgrund eines Kommentars): http://www.jguru.com/faq/view.jsp?EID=72378

So Gedanken auf der Grundlage der oben genannten.... Sie könnte das Lesen in einem Thread und regelmäßig überprüfen, um zu sehen, wenn der Thread aufgehört hat, Daten zu lesen (Update eine gemeinsame Variable wahrscheinlich). Wenn dies der Fall ist, beenden Sie die Verbindung und den Thread und gehen Sie damit um, wie auch immer Sie es brauchen.

Eine andere Möglichkeit ist, die HTTPURLConnection nicht zu verwenden und die benötigten Teile selbst zu bearbeiten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X