Pha*_*inh 6 android android-connectivitymanager
我们使用 AndroidConnectivityManager来监听我们的应用程序内的互联网连接变化,如下所示。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
...
ConnectionStateMonitor().enable(this)
}
class ConnectionStateMonitor : NetworkCallback() {
private val networkRequest: NetworkRequest = NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build()
fun enable(context: Context) {
val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
connectivityManager.registerNetworkCallback(networkRequest, this)
}
override fun onAvailable(network: Network) {
Log.i(TAG, "onAvailable ")
}
override fun onLost(network: Network?) {
super.onLost(network)
Log.i(TAG, "onLost ")
}
}
}
Run Code Online (Sandbox Code Playgroud)
除了我们遇到的两个问题外,此实现运行良好
如果我们同时使用 wifi 和移动数据连接到互联网并关闭 wifi 有时会onLost()触发回调onAvailable(),如预期的那样,但在其他情况下仅 onLost()触发这是不正确的。
如果我们没有互联网连接并打开应用程序onLost()不会被触发,但是如果我们有互联网连接并打开应用程序onAvailable()被触发。
任何帮助、建议、解决方法或其他可靠检测互联网连接变化的方法都将不胜感激。
在小米 A2 (Android 9)、一加 (Android 9) 上测试
DEMO 项目
https://github.com/PhanVanLinh/AndroidNetworkChangeReceiver
| 归档时间: |
|
| 查看次数: |
1933 次 |
| 最近记录: |