如何在 Kotlin 中检查 Internet 连接?
如果正在开发基于 Internet 的 Android 应用程序,则必须具有检查 Internet 连接并通知用户没有可用 Internet 的功能。所以在本文中,它已经被一步一步地演示了。关于如何检查互联网连接。看看下面的图片,它给出了讨论的概述。
分步实施
第 1 步:创建一个空的活动项目
创建一个空的 Activity android studio 项目。请参阅如何在 Android Studio 中创建/启动新项目,了解如何创建一个空的活动项目。并选择Kotlin作为编程语言。
步骤 2:使用 acitivity_main.xml 文件
- 应用程序的主要布局仅包含一个按钮。单击后,会出现一个包含连接状态的吐司。
- 要实现相同的 UI,请调用acitivity_main.xml文件中的以下代码。
XML
Kotlin
import android.content.Context
import android.net.ConnectivityManager
import android.net.NetworkCapabilities
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.Toast
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// register the UI element button
val checkButton: Button = findViewById(R.id.buttonCheck)
// handle the button click to trigger
// checkForInternet function
// and show the Toast message according to it.
checkButton.setOnClickListener {
if (checkForInternet(this)) {
Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this, "Disconnected", Toast.LENGTH_SHORT).show()
}
}
}
private fun checkForInternet(context: Context): Boolean {
// register activity with the connectivity manager service
val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
// if the android version is equal to M
// or greater we need to use the
// NetworkCapabilities to check what type of
// network has the internet connection
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// Returns a Network object corresponding to
// the currently active default data network.
val network = connectivityManager.activeNetwork ?: return false
// Representation of the capabilities of an active network.
val activeNetwork = connectivityManager.getNetworkCapabilities(network) ?: return false
return when {
// Indicates this network uses a Wi-Fi transport,
// or WiFi has network connectivity
activeNetwork.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true
// Indicates this network uses a Cellular transport. or
// Cellular has network connectivity
activeNetwork.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
// else return false
else -> false
}
} else {
// if the android version is below M
@Suppress("DEPRECATION") val networkInfo =
connectivityManager.activeNetworkInfo ?: return false
@Suppress("DEPRECATION")
return networkInfo.isConnected
}
}
}
输出界面:
第 3 步:使用 MainActivity.kt 文件
- MainActivity.kt 文件包含一些已经内置的 API,用于处理网络连接。
- 首先,我们应该向 ConnectivityManager 服务注册活动。
- 其次,我们需要检查android版本。如果版本低于 M 使用 activeNetworkInfo API,或者如果版本等于或高于 M 使用 NetworkCapabilities API。
- 为了实现相同的调用,在 MainActivity.kt 文件中添加了以下代码注释以便更好地理解。
科特林
import android.content.Context
import android.net.ConnectivityManager
import android.net.NetworkCapabilities
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.Toast
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// register the UI element button
val checkButton: Button = findViewById(R.id.buttonCheck)
// handle the button click to trigger
// checkForInternet function
// and show the Toast message according to it.
checkButton.setOnClickListener {
if (checkForInternet(this)) {
Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this, "Disconnected", Toast.LENGTH_SHORT).show()
}
}
}
private fun checkForInternet(context: Context): Boolean {
// register activity with the connectivity manager service
val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
// if the android version is equal to M
// or greater we need to use the
// NetworkCapabilities to check what type of
// network has the internet connection
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// Returns a Network object corresponding to
// the currently active default data network.
val network = connectivityManager.activeNetwork ?: return false
// Representation of the capabilities of an active network.
val activeNetwork = connectivityManager.getNetworkCapabilities(network) ?: return false
return when {
// Indicates this network uses a Wi-Fi transport,
// or WiFi has network connectivity
activeNetwork.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true
// Indicates this network uses a Cellular transport. or
// Cellular has network connectivity
activeNetwork.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
// else return false
else -> false
}
} else {
// if the android version is below M
@Suppress("DEPRECATION") val networkInfo =
connectivityManager.activeNetworkInfo ?: return false
@Suppress("DEPRECATION")
return networkInfo.isConnected
}
}
}
输出:
想要一个更快节奏和更具竞争力的环境来学习 Android 的基础知识吗?
单击此处前往由我们的专家精心策划的指南,旨在让您立即做好行业准备!