android - Android 获取 Wifi 连接状态
问题描述
我目前正在使用NetworkRequest
和NetworkCallback
方法(由 Google 官方推荐)来获取 Wifi 连接的状态,并且它可以部分工作。
我期待onUnavailable()
将在: 时被调用close app -> turn off Wifi -> launch app
,但是什么也没发生:
private fun getNetworkRequest(): NetworkRequest {
return NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI) //restric to Wifi type only
.build()
}
private fun getNetworkCallBack(): ConnectivityManager.NetworkCallback {
return object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) { //works
super.onAvailable(network)
Toast.makeText(requireContext(), "Wifi is on!", Toast.LENGTH_SHORT).show()
}
override fun onLost(network: Network) { //works
super.onLost(network)
Toast.makeText(requireContext(), "Wifi turns off!", Toast.LENGTH_SHORT).show()
}
override fun onUnavailable() { //not works as expected
super.onUnavailable()
Toast.makeText(requireContext(), "Wifi unavailable!", Toast.LENGTH_SHORT).show()
}
}
}
fun Fragment.getConnectivityManager() = requireContext().getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
override fun onResume() {
super.onResume()
getConnectivityManager().registerNetworkCallback(networkRequest, networkCallback)
}
解决方案
好的,我得到了解决方案:
val isWifiOn = with(getConnectivityManager()) {
getNetworkCapabilities(activeNetwork)?.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
}
推荐阅读
- python - 右键单击任务栏图标,然后在弹出菜单上选择
- sql - 没有聚合函数的 SQL Server 数据透视查询
- mysql - Docker NodeJS 与 MySQL 连接 ECONNREFUSED 127.0.0.1:8000
- javascript - 在 div 元素中显示 javascript 消息
- r - 如何重命名包中使用的数据集?
- php - ReactPHP QueryResult 优化?
- r - 兰德森林拟合:(函数(类,fdef,mtable)中的错误
- python - 大熊猫的groupby是可交换的吗?
- r - 如何在 R 中使用带有空参数的 group_by()?
- ios - 如何将相机权限添加到颤振项目中?