android studio 如何持续检查是否有活动的互联网连接
android studio How to continuously check if there is an active internet connection
我已经阅读了互联网上发布的许多其他答案,但它们并不是我要找的,我知道如何检查设备是否 connected/disconnected
到 internet/mobile
data 我想做的是检查数据是否可以通过该网络传输,您可能已连接到网络但可能无法通过该网络传输数据。
这是我现在正在做的事情
val listener = object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
super.onAvailable(network)
isActiveNetwork()
}
override fun onUnavailable() {
super.onUnavailable()
}
override fun onLost(network: Network) {
super.onLost(network)
// no internet
}
}
(getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager).registerNetworkCallback(NetworkRequest.Builder().build(), listener )
isActiveNetwork
方法用于检查互联网连接是否有效
private fun isActiveNetwork(){
try {
if(InetAddress.getByName("www.google.com").isReachable(5000)){
//active
}
else{
// not active
}
} catch (e: Exception) {
//not active
}
}
问题是这个方法会检查一次互联网连接是否有效,仅此而已,我已经尝试过
private fun isActiveNetwork(){
try {
if(InetAddress.getByName("www.google.com").isReachable(5000)){
//active
}
else{
isActiveNetwork()
}
} catch (e: Exception) {
isActiveNetwork()
}
}
尝试每 5 秒检查一次互联网连接是否有效,但这导致我的应用程序崩溃,因为 Whosebug
...有什么建议吗?
您可以使用 Runnable 和 post 它使用处理程序每 5 秒连续检查一次互联网连接。声明一个全局布尔变量 isConnected 并创建一个 Runnable,如:
private var isActiveNetwork= object : Runnable {
override fun run() {
try {
if(InetAddress.getByName("www.google.com").isReachable(5000))
{
isConnected = true
}
else{
isConnected = false
}
Handler().postDelayed(this,5000)
}
catch (e: Exception) {
isConnected = false
}
}
}
现在您可以从网络请求回调中启动此 Runnable:
override fun onAvailable(network: Network) {
super.onAvailable(network)
Handler().post(isActiveNetwork)
}
我已经阅读了互联网上发布的许多其他答案,但它们并不是我要找的,我知道如何检查设备是否 connected/disconnected
到 internet/mobile
data 我想做的是检查数据是否可以通过该网络传输,您可能已连接到网络但可能无法通过该网络传输数据。
这是我现在正在做的事情
val listener = object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
super.onAvailable(network)
isActiveNetwork()
}
override fun onUnavailable() {
super.onUnavailable()
}
override fun onLost(network: Network) {
super.onLost(network)
// no internet
}
}
(getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager).registerNetworkCallback(NetworkRequest.Builder().build(), listener )
isActiveNetwork
方法用于检查互联网连接是否有效
private fun isActiveNetwork(){
try {
if(InetAddress.getByName("www.google.com").isReachable(5000)){
//active
}
else{
// not active
}
} catch (e: Exception) {
//not active
}
}
问题是这个方法会检查一次互联网连接是否有效,仅此而已,我已经尝试过
private fun isActiveNetwork(){
try {
if(InetAddress.getByName("www.google.com").isReachable(5000)){
//active
}
else{
isActiveNetwork()
}
} catch (e: Exception) {
isActiveNetwork()
}
}
尝试每 5 秒检查一次互联网连接是否有效,但这导致我的应用程序崩溃,因为 Whosebug
...有什么建议吗?
您可以使用 Runnable 和 post 它使用处理程序每 5 秒连续检查一次互联网连接。声明一个全局布尔变量 isConnected 并创建一个 Runnable,如:
private var isActiveNetwork= object : Runnable {
override fun run() {
try {
if(InetAddress.getByName("www.google.com").isReachable(5000))
{
isConnected = true
}
else{
isConnected = false
}
Handler().postDelayed(this,5000)
}
catch (e: Exception) {
isConnected = false
}
}
}
现在您可以从网络请求回调中启动此 Runnable:
override fun onAvailable(network: Network) {
super.onAvailable(network)
Handler().post(isActiveNetwork)
}