7

私のAndroidプログラムには、ファイルをダウンロードするコードがあります。これは問題なく動作しますが、携帯電話ではいつでも切断できるため、途中で誰かが電話をかけたり、携帯電話の受信を失ったりしたときに、再接続してダウンロードを再開するように変更する必要があります。InputStreamが機能しなくなったことを検出する方法がわかりません。以下のコードを参照してください。

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

インターネット接続が失われると、ログに次のように表示されます。

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

そして、私のプログラムはしばらくの間ハングします((len1=など。インターネットが切断されたときにインターネットが再び接続されるのを待ってからダウンロードを再開するようにする必要があります。

4

1 に答える 1

3

こちらをご覧ください:http://developer.android.com/reference/java/nio/channels/SocketChannel.html

編集(コメントに基づく): http ://www.jguru.com/faq/view.jsp?EID = 72378

したがって、上記に基づく考え....スレッドに読み取り値を入れ、スレッドがデータの読み取りを停止したかどうかを定期的にチェックすることができます(おそらく共有変数を更新します)。接続とスレッドを強制終了し、処理する必要がある場合。

もう1つの方法は、HTTPURLConnectionを使用せず、自分で必要なビットを処理することです。

于 2009-02-26T02:44:04.823 に答える