Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android检查kotlin中的互联网连接_Android_Kotlin - Fatal编程技术网

Android检查kotlin中的互联网连接

Android检查kotlin中的互联网连接,android,kotlin,Android,Kotlin,我需要检查设备是否连接了internet,我搜索了一些示例,但当我复制和粘贴代码时,总是会出现错误或不推荐使用的函数。我也不明白我必须把检查连接的方法放在哪里,因为我需要在viewModel中检查internet连接以发出一些请求,而我找到的所有方法在参数中都有上下文,我无法在viewModel中获取上下文 我尝试了这个代码,但我不明白我必须把它放在哪里,我得到了什么 “TYPE\u WIFI、TYPE\u MOBILE、TYPE\u ETHERNET:Int”不推荐使用。在Java中已弃用 p

我需要检查设备是否连接了internet,我搜索了一些示例,但当我复制和粘贴代码时,总是会出现错误或不推荐使用的函数。我也不明白我必须把检查连接的方法放在哪里,因为我需要在viewModel中检查internet连接以发出一些请求,而我找到的所有方法在参数中都有上下文,我无法在viewModel中获取上下文

我尝试了这个代码,但我不明白我必须把它放在哪里,我得到了什么

“TYPE\u WIFI、TYPE\u MOBILE、TYPE\u ETHERNET:Int”不推荐使用。在Java中已弃用

private fun isInternetAvailable(context: Context): Boolean {
        var result = false
        val connectivityManager =
            context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            val networkCapabilities = connectivityManager.activeNetwork ?: return false
            val actNw =
                connectivityManager.getNetworkCapabilities(networkCapabilities) ?: return false
            result = when {
                actNw.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true
                actNw.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
                actNw.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> true
                else -> false
            }
        } else {
            connectivityManager.run {
                connectivityManager.activeNetworkInfo?.run {
                    result = when (type) {
                        ConnectivityManager.TYPE_WIFI -> true
                        ConnectivityManager.TYPE_MOBILE -> true
                        ConnectivityManager.TYPE_ETHERNET -> true
                        else -> false
                    }

                }
            }
        }

        return result
    }
有人能告诉我怎么做这个检查吗?

我创建了一个助手类。 Network.kt

object Network {
    private const val NETWORK_STATUS_NOT_CONNECTED = 0
    private const val NETWORK_STATUS_WIFI = 1
    private const val NETWORK_STATUS_MOBILE = 2
    private const val TYPE_WIFI = 1
    private const val TYPE_MOBILE = 2
    private const val TYPE_NOT_CONNECTED = 0
    private fun connectivityStatus(context: Context): Int {
        val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        val activeNetwork = connectivityManager.activeNetworkInfo
        if (null != activeNetwork) {
            if (activeNetwork.type == ConnectivityManager.TYPE_WIFI) return TYPE_WIFI
            if (activeNetwork.type == ConnectivityManager.TYPE_MOBILE) return TYPE_MOBILE
        }
        return TYPE_NOT_CONNECTED
    }


    private fun connectivityStatusString(context: Context): Int {
        val connection = connectivityStatus(context)
        var status = -1
        if (connection == TYPE_WIFI) status = NETWORK_STATUS_WIFI else if (connection == TYPE_MOBILE) status = NETWORK_STATUS_MOBILE else if (connection == TYPE_NOT_CONNECTED) status = NETWORK_STATUS_NOT_CONNECTED
        return status
    }

    fun checkConnectivity(context : Context):Boolean{
        val status = connectivityStatusString(context)
        return status == NETWORK_STATUS_WIFI || status == NETWORK_STATUS_MOBILE
    }
}
要访问它,你需要像这样使用它

if (Network.checkConnectivity(this@MainActivity))
    \\Internet is working
else
    \\No internet connectivity
我创建了一个助手类。 Network.kt

object Network {
    private const val NETWORK_STATUS_NOT_CONNECTED = 0
    private const val NETWORK_STATUS_WIFI = 1
    private const val NETWORK_STATUS_MOBILE = 2
    private const val TYPE_WIFI = 1
    private const val TYPE_MOBILE = 2
    private const val TYPE_NOT_CONNECTED = 0
    private fun connectivityStatus(context: Context): Int {
        val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        val activeNetwork = connectivityManager.activeNetworkInfo
        if (null != activeNetwork) {
            if (activeNetwork.type == ConnectivityManager.TYPE_WIFI) return TYPE_WIFI
            if (activeNetwork.type == ConnectivityManager.TYPE_MOBILE) return TYPE_MOBILE
        }
        return TYPE_NOT_CONNECTED
    }


    private fun connectivityStatusString(context: Context): Int {
        val connection = connectivityStatus(context)
        var status = -1
        if (connection == TYPE_WIFI) status = NETWORK_STATUS_WIFI else if (connection == TYPE_MOBILE) status = NETWORK_STATUS_MOBILE else if (connection == TYPE_NOT_CONNECTED) status = NETWORK_STATUS_NOT_CONNECTED
        return status
    }

    fun checkConnectivity(context : Context):Boolean{
        val status = connectivityStatusString(context)
        return status == NETWORK_STATUS_WIFI || status == NETWORK_STATUS_MOBILE
    }
}
要访问它,你需要像这样使用它

if (Network.checkConnectivity(this@MainActivity))
    \\Internet is working
else
    \\No internet connectivity

您必须扩展AndroidViewModel()类。之后,您可以在viewModel中访问应用程序上下文


类viewModel(app:Application):AndroidViewModel(app){}

您必须扩展AndroidViewModel()类。之后,您可以在viewModel中访问应用程序上下文


class viewModel(app:Application):AndroidViewModel(app){}

我建议阅读相关文档页面:我建议阅读相关文档页面:IDE在
@MainActivity
中显示错误,在
if(Network.checkConnectivity)中(this@MainActivity))
您可以像(网络)一样使用它。检查连接(此))或者用您当前的活动名称替换MainActivity。但是我在viewModel中使用它,并且包含片段的活动是MainActivity,但是IDE显示此错误该函数需要上下文。将上下文传递给它,错误就会消失。这有什么关系。这仅显示是否存在wifi或移动连接。如果他们在
if(Network.checkConnectivity)中的
@MainActivity
上显示错误,则不会显示(this@MainActivity))
您可以像(Network.checkConnectivity(this))一样使用它,也可以用当前的活动名称替换MainActivity。但是我在viewModel中使用它,包含该片段的活动是MainActivity,但IDE向我显示此错误该函数需要上下文。将上下文传递给它,错误就会消失。这有什么关系。这仅显示是否存在wifi或移动连接。如果他们有互联网就不会。