registerDefaultNetworkCallback和registerNetworkCallback之间的区别
我在更新我的API 28的Android应用程序时遇到了regoredDefaultNetworkCallback和registerNetworkCallback。
查看文档后,我找不到注册网络回调和注册默认网络回调之间的区别。
什么时候会使用哪个?
提前致谢 :)
我在更新我的API 28的Android应用程序时遇到了regoredDefaultNetworkCallback和registerNetworkCallback。
查看文档后,我找不到注册网络回调和注册默认网络回调之间的区别。
什么时候会使用哪个?
提前致谢 :)
据我所知,和之间的区别只是基于自定义。
(令人惊讶地)作为默认网络侦听器工作,同时它更易于配置。例如:registerDefaultNetworkCallbackregisterNetworkCallbackregisterDefaultNetworkCallbackregisterNetworkCallback
val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val builder = NetworkRequest.Builder()
builder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
val networkRequest = builder.build()
connectivityManager.registerNetworkCallback(networkRequest,
object : ConnectivityManager.NetworkCallback () {
override fun onAvailable(network: Network?) {
super.onAvailable(network)
Log.i("Test", "Network Available")
}
override fun onLost(network: Network?) {
super.onLost(network)
Log.i("Test", "Connection lost")
}
})
仅当用户连接到蜂窝网络时,才会调用此处(通过连接到WiFi,它不会记录任何内容)。断开与蜂窝网络连接时也是如此。onAvailableonLost
如果我们这样做:
connectivityManager.registerDefaultNetworkCallback(object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network?) {
super.onAvailable(network)
Log.i("Test", "Default -> Network Available")
}
override fun onLost(network: Network?) {
super.onLost(network)
Log.i("Test", "Default -> Connection lost")
}
})
当用户连接到/断开)网络(可以是WiFi或蜂窝网络)时,这两个函数都用作默认回调。
这些只是一些非常基本的例子。当然,通过设置其或 可以有很多配置。您可以在NetworkRequest的官方文档中阅读有关这些内容的更多信息。NetworkRequestcapabilitytransportType
registerNetworkCallback() 被添加到 API 级别 21(Android 5.0,Lollipop)中。它允许您监听满足特定传输类型(WiFi,蜂窝,蓝牙等)和功能(SMS,,...)的网络变化。NOT_METERED
registerDefaultNetworkCallback() 已添加到 API 级别 24(Android 7.0,Nougat)中,并且在发生任何网络更改时使用您的回调,而不管传输类型和功能如何。
注册NetworkCallback()的示例。至少在我的情况下,我不关心过滤器,并希望我的代码适用于任何网络类型。这可以通过空对象实现:Builder
/* Automatically start a download once an internet connection is established */
val cm = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
// could filter using .addCapability(int) or .addTransportType(int) on Builder
val networkChangeFilter = NetworkRequest.Builder().build()
cm.registerNetworkCallback(networkChangeFilter,
object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) = downloadStuff()
}
)
上面的代码等效于这个代码与registerDefaultNetworkCallback():
val cm = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
cm.registerDefaultNetworkCallback(
object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) = downloadStuff()
}
)
令人困惑的名称实际上只是传输类型和功能的过滤器。NetworkRequest
默认版本代码较少,但 API 级别较低,因此支持的手机较少(74% 对 94%)。由于我在ConnectivityManagerCompat中找不到此API调用的向后兼容版本,因此如果API级别21-23对您很重要,我建议使用第一个版本。