【发布时间】:2021-03-21 01:46:52
【问题描述】:
我的应用使用其 WiFi 连接到外部设备(该设备用作服务器)。随着 Android 10 的推出,我需要为不同的平台实现单独的 WiFi 连接流(WifiNetworkSpecifier 用于 Android 10+,wifiManager.enableNetwork 用于
在应用程序中,我可以将文件上传到该外部设备。为此,我需要使用HttpURLConnection。所以我跑了:
val url = URL(UPDATE_FIRMWARE_URL)
val connection = (url.openConnection() as HttpURLConnection)
with(connection) {
doInput = true
doOutput = true
useCaches = false
requestMethod = METHOD_POST
//setRequestProperty(HEADER_CONNECTION, "Keep-Alive")
setRequestProperty("Connection", "close")
connectTimeout = 6000
setRequestProperty(HEADER_USER_AGENT, "Android Multipart HTTP Client 1.0")
setRequestProperty(HEADER_CONTENT_TYPE, "multipart/form-data; boundary=$boundary")
}
connection.connect()
val outputStream = connection.outputStream
DataOutputStream(outputStream).use { outputStream ->
// actual file upload
}
现在,实际更新包含两个文件,第一次上传后设备重启,我需要重新连接到它的wifi并上传第二个文件。
在 Android connection.connect() 时,我得到 ConnectExcpetion 内部原因connect failed: ENETUNREACH (Network is unreachable)(这真的没有意义,因为我连接到那个网络......)
java.net.ConnectException: Failed to connect to (...)
at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:1409)
at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:1359)
at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:221)
at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:144)
at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:106)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:400)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:333)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:483)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:135)
最初我在 Android 10 上第一次连接时也遇到了问题,但我找到了 this 文章,并添加了 connectTimeout 帮助,但现在当我尝试第二次连接时连接仍然失败(并且每个下次。唯一有帮助的是重新启动整个应用程序(这不是真正的解决方案)。
尽管我总是执行相同的代码,但下一个连接失败可能是什么问题?
【问题讨论】:
-
我会很感激任何评论为什么我的问题应该得到-1...如果我可以改进我的问题,我会很乐意这样做。显然,Android 10 的行为似乎发生了一些变化,所以我想知道如何才能过度使用它。
标签: android httpurlconnection android-wifi android-10.0