Android InputStream Internet 断开连接
Posted
技术标签:
【中文标题】Android InputStream Internet 断开连接【英文标题】:Android InputStream Internet Disconnect 【发布时间】:2010-10-09 23:41:15 【问题描述】:在我的 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)
然后我的程序就挂在 while( (len1 = etc.) 上
【问题讨论】:
【参考方案1】:看这里:http://developer.android.com/reference/java/nio/channels/SocketChannel.html
编辑(基于评论): http://www.jguru.com/faq/view.jsp?EID=72378
所以基于上述的想法....您可以将读取放在一个线程中并定期检查线程是否已停止读取数据(可能更新共享变量)。如果它已经终止了连接和线程并按照您的需要进行处理。
另一种选择是不使用 HTTPURLConnection 并处理您自己需要的位。
【讨论】:
嗨,谢谢,但我有一个 HTTPURL 连接 - 你如何从中获取 SocketChannel?谢谢,以上是关于Android InputStream Internet 断开连接的主要内容,如果未能解决你的问题,请参考以下文章
Android Bound 服务:Inter vs Intra - 使用 Messenger 的应用程序通信
Android InputStream Internet 断开连接
如何在 Android 上解除对 InputStream.read() 的阻止?
java InputStream To String Android
在android中从HttpURLConnection获取InputStream时获取UnknownLengthHttpInputStream