ConnectivityManager
により、
次の条件に基づいて、デバイスがネットワークに接続することをリクエストできる API
デバイスの機能やデータ転送のオプションなど、さまざまな条件に従ったものになります。
コールバックの実装は、デバイスの認証情報に関する情報をアプリに提供し、 現在の接続ステータスと機能に関連する 接続しますこの API を使用すると、デバイスが現在動作しているかどうかを アプリの要件を満たすネットワークに接続されている
ネットワーク リクエストを構成する
ネットワークのトランスポート タイプ(Wi-Fi、モバイル通信など)を指定する 現在接続されているネットワークの機能(インターネットなど) ネットワーク リクエストを構成する必要があります。
NetworkRequest
を宣言します。
アプリのネットワーク接続の要件を示します。次のコードは、
インターネットに接続され、Wi-Fi または
またはモバイル接続を選択します
Kotlin
val networkRequest = NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) .build()
Java
NetworkRequest networkRequest = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) .build();
接続によっては、他の接続よりもコストが大幅に高くなる場合があります(
モバイル接続は一般的に高額です)。使用
NetworkCapabilities#NET_CAPABILITY_NOT_METERED
コストがかかるかどうかを判断できます。従量制接続の場合
アプリのデータ消費量を削減したり、デバイスのデータ消費量が増加するまで
非従量制接続を使用します
ネットワーク コールバックを構成する
NetworkRequest
を ConnectivityManager
に登録する場合は、次のことを行う必要があります。
実装
NetworkCallback
接続ステータスやネットワークの変更に関する通知を
提供します
NetworkCallback
で最も一般的に実装される関数は次のとおりです。
次のとおりです。
onAvailable()
要件を満たす新しいネットワークにデバイスが接続されたことをNetworkRequest
で指定された機能とトランスポート タイプの要件。onLost()
は、デバイスがネットワークへの接続を失ったことを示します。onCapabilitiesChanged()
ネットワークの機能が変更されたことを示します「NetworkCapabilities
オブジェクト ネットワークの現在の機能に関する情報を提供します。
Kotlin
private val networkCallback = object : ConnectivityManager.NetworkCallback() { // network is available for use override fun onAvailable(network: Network) { super.onAvailable(network) } // Network capabilities have changed for the network override fun onCapabilitiesChanged( network: Network, networkCapabilities: NetworkCapabilities ) { super.onCapabilitiesChanged(network, networkCapabilities) val unmetered = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED) } // lost network connection override fun onLost(network: Network) { super.onLost(network) } }
Java
private ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(@NonNull Network network) { super.onAvailable(network); } @Override public void onLost(@NonNull Network network) { super.onLost(network); } @Override public void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities networkCapabilities) { super.onCapabilitiesChanged(network, networkCapabilities); final boolean unmetered = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED); } };
ネットワークの更新を登録する
NetworkRequest
と NetworkCallback
を宣言したら、
requestNetwork()
または registerNetworkCallback()
機能を使用し、要件を満たすデバイスから接続するネットワークを検索し、
NetworkRequest
。その後、ステータスは NetworkCallback
に報告されます。
Kotlin
val connectivityManager = getSystemService(ConnectivityManager::class.java) as ConnectivityManager connectivityManager.requestNetwork(networkRequest, networkCallback)
Java
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(ConnectivityManager.class); connectivityManager.requestNetwork(networkRequest, networkCallback);