Androidアプリを更新しているときに registerDefaultNetworkCallback および registerNetworkCallback に遭遇しました。
ドキュメントを確認したところ、ネットワークコールバックの登録とdefaultネットワークコールバック。
いつどれを使用しますか?
前もって感謝します :)
私が理解している限り、registerDefaultNetworkCallback
とregisterNetworkCallback
の違いは、カスタマイズにのみ基づいています。registerDefaultNetworkCallback
はデフォルトのネットワークリスナーとして(驚くほど)機能しますが、registerNetworkCallback
はより構成可能です。例えば:
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")
}
})
ここでonAvailable
は、ユーザーが携帯電話ネットワークに接続した場合にのみ呼び出されます(WiFiに接続しても何もログに記録されません)。セルラーネットワークから切断するときも同じことがonLost
を行います。
このようにすると:
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
は、capability
またはtransportType
を設定することにより、多くの構成を持つことができます。これらの詳細については、 NetworkRequest の公式ドキュメントを参照してください。
私が理解している限り、そして@MihaiVによって提供される情報は別として、それらの間には別の違いがあります。
ConnectivityManager.registerDefaultNetworkCallback()
はAPI 24(またはHandler
と一緒に使用するかどうかに応じて26)で追加されました。
And ConnectivityManager.registerNetworkCallback()
はAPI 21(またはNetworkRequest
と一緒に使用する場合はAPI 23)で追加されました。