2009-02-26 14 views
6

W moim programie na Androida mam kod, który pobiera plik. Działa to dobrze, ale ponieważ na telefonie komórkowym, możesz być odłączony w dowolnym momencie, muszę to zmienić, czy to ponownie łączy się i wznawia pobieranie, gdy jesteś w połowie i ktoś wzywa/tracisz odbiór komórek/etc. Nie mogę dowiedzieć się, jak wykryć, że InputStream przestał działać. Zobacz poniższy kod: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); 
    } 

Kiedy tracę połączenia internetowego, Mój dziennik pokazuje:

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

I wtedy właśnie mój program zawiesza się na chwilę ((len1 = itd. Muszę to zrobić tak kiedy internet zostanie odłączony czekam na internet zostać ponownie podłączony, a następnie wznowić pobieranie

Odpowiedz

1

Spójrz tutaj. http://developer.android.com/reference/java/nio/channels/SocketChannel.html

edycji (w oparciu o komentarzu): http://www.jguru.com/faq/view.jsp?EID=72378

Więc myśli oparte na powyższym .... możesz umieścić odczyt w wątku i okresowo sprawdzać, czy wątek przestał odczytywać dane (prawdopodobnie zaktualizować udostępnioną zmienną). Jeśli zabił połączenie i wątek i poradził sobie z nim, jednak musisz.

Inną alternatywą jest nie używanie połączenia HTTPURLConnection i radzenie sobie z bitami, których potrzebujesz.

+1

Witam, dziękuję, ale mam połączenie HTTPURL - w jaki sposób otrzymujesz z tego SocketChannel? Dzięki, –

Powiązane problemy