【发布时间】:2022-07-07 00:24:49
【问题描述】:
我正在制作一个示例应用,只是为了看看如何在 Android 上监控网络连接。
为此,我遵循此文档: https://developer.android.com/training/monitoring-device-state/connectivity-status-type
由于我没有得到预期的结果,我决定创建这篇文章,希望从有经验的用户那里获得一些相关的反馈。
以下,我的源代码仅限于一个文件:MainActivity.kt。
package me.soft.network
import android.net.ConnectivityManager
import android.net.Network
import android.net.NetworkCapabilities
import android.net.NetworkRequest
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
class MainActivity : AppCompatActivity() {
lateinit var networkRequest: NetworkRequest
private val networkCallback = object : ConnectivityManager.NetworkCallback() {
// network is available for use
override fun onAvailable(network: Network) {
super.onAvailable(network)
println("onAvailable --- CALLED")
}
// Network capabilities have changed for the network
override fun onCapabilitiesChanged(
network: Network,
networkCapabilities: NetworkCapabilities
) {
super.onCapabilitiesChanged(network, networkCapabilities)
val unmetered = networkCapabilities.hasCapability(NetworkCapabilities. NET_CAPABILITY_NOT_METERED)
println("onCapabilitiesChanged --- CALLED")
}
// lost network connection
override fun onLost(network: Network) {
super.onLost(network)
println("onLost --- CALLED")
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
networkRequest = NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
.build()
val connectivityManager = getSystemService(ConnectivityManager::class.java) as ConnectivityManager
connectivityManager.requestNetwork(networkRequest, networkCallback)
}
}
正如人们所注意到的,它主要直接来自我上面提到的文档。 启动应用程序后,我希望看到它运行并通过调用函数对设备连接状态发生的任何事情做出反应:onAvailable、onCapabilitiesChanged、onLost of the networkCallback ConnectivityManager.NetworkCallback 对象。但这不会发生,而是应用在启动后立即终止。
我做错了什么?
【问题讨论】:
标签: android kotlin network-programming android-connectivitymanager