我有一个Android应用程序,可以使用okhttp库从服务器获取数据。它的版本为:https://github.com/ertrzyiks/android-http-data-widget
class LoadData() : AsyncTask<Void, Void, String>() {
override fun doInBackground(vararg params: Void?): String? {
val client = OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.build()
val url = URL("https://example.com/some/path")
val request = Request.Builder()
.url(url)
.get()
.build()
try {
val response = client.newCall(request).execute()
val responseBody = response.body!!.string()
return responseBody
} catch (e: Exception) {
return e.message
}
}
}
我还将互联网权限添加到了清单文件中
<uses-permission android:name="android.permission.INTERNET"/>
我使用USB电缆将移动设备连接到计算机,使用Android Studio在该设备上运行应用程序,并且一切正常。发出了请求,我可以看到响应。
尽管我断开USB电缆的连接却看到以下错误:
failed to connect to example.com/ip here (port 443) from /192.168.1.10 (port 41446) after 10000ms
当我使用HttpUrlConnection时,也会发生此问题。
我的移动设备是三星Galaxy S8,Android版本是9。
当我发出请求然后插入USB电缆时,它可以工作。因此,显然,只有当设备连接到ADB时,我的应用程序才能访问Internet。我该如何解决?
我使用的库:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.core:core-ktx:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.squareup.okhttp3:okhttp:4.1.0'
implementation 'com.fasterxml.jackson.core:jackson-core:2.0.1'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.8'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
}
答案 0 :(得分:0)
我的三星设备处于省电模式,并且选中了限制背景数据选项。此选项可防止后台应用使用Wi-Fi和移动数据。禁用此选项后,即使没有连接调试器,我的小部件也可以访问Internet连接。
如何禁用此选项: