web-dev-qa-db-ja.com

registerDefaultNetworkCallbackとregisterNetworkCallbackの違い

Androidアプリを更新しているときに registerDefaultNetworkCallback および registerNetworkCallback に遭遇しました。

ドキュメントを確認したところ、ネットワークコールバックの登録とdefaultネットワークコールバック

いつどれを使用しますか?

前もって感謝します :)

12
KGCybeX

私が理解している限り、registerDefaultNetworkCallbackregisterNetworkCallbackの違いは、カスタマイズにのみ基づいています。
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 の公式ドキュメントを参照してください。

2
MihaiV

私が理解している限り、そして@MihaiVによって提供される情報は別として、それらの間には別の違いがあります。

ConnectivityManager.registerDefaultNetworkCallback()はAPI 24(またはHandlerと一緒に使用するかどうかに応じて26)で追加されました。

And ConnectivityManager.registerNetworkCallback()はAPI 21(またはNetworkRequestと一緒に使用する場合はAPI 23)で追加されました。

0
xarlymg89