接続のステータスと種類をモニタリングする

ConnectivityManager では、 次の条件に基づいて、デバイスがネットワークに接続することをリクエストできる API デバイスの機能やデータ転送のオプションなど、さまざまな条件に従った調整が行われます。

コールバックの実装は、デバイスの認証情報に関する情報をアプリに提供し、 現在の接続ステータスと機能に関連する 接続しますこの API を使用すると、デバイスが現在動作しているかどうかを アプリの要件を満たすネットワークに接続されている

ネットワーク リクエストを構成する

ネットワークのトランスポート タイプ(Wi-Fi、モバイル通信など)を指定する 現在接続されているネットワークの機能(インターネットなど) ネットワーク リクエストを構成する必要があります。

NetworkRequest を宣言します。 アプリのネットワーク接続の要件を示します。次のコードは、インターネットに接続されているネットワークのリクエストを作成し、トランスポート タイプに Wi-Fi 接続またはモバイル接続を使用します。

KotlinJava
val networkRequest = NetworkRequest.Builder()
        .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
        .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
        .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
        .build()
NetworkRequest networkRequest = new NetworkRequest.Builder()
        .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
        .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
        .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
        .build();

接続によっては、他の接続よりもコストが大幅に高くなる場合があります( モバイル接続は一般的に高額です)。使用 NetworkCapabilities#NET_CAPABILITY_NOT_METERED コストが高いかどうかを判断します。従量制の接続を使用しているときは、アプリのデータ使用量を減らすか、デバイスが従量制でない接続になるまで待つようにしてください。

ネットワーク コールバックを構成する

NetworkRequestConnectivityManager に登録する場合は、接続ステータスとネットワーク機能の変更に関する通知を受け取るために NetworkCallback を実装する必要があります。

NetworkCallback で最も一般的に実装される関数は次のとおりです。 次のとおりです。

  • onAvailable() 要件を満たす新しいネットワークにデバイスが接続されたことを NetworkRequest で指定された機能とトランスポート タイプの要件。
  • onLost() は、デバイスがネットワークへの接続を失ったことを示します。
  • onCapabilitiesChanged() ネットワークの機能が変更されたことを示します「 NetworkCapabilities オブジェクト ネットワークの現在の機能に関する情報を提供します。
KotlinJava
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)
    }
}
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);
    }
};

ネットワークの更新を登録する

NetworkRequestNetworkCallback を宣言したら、requestNetwork() 関数または registerNetworkCallback() 関数を使用して、NetworkRequest を満たすデバイスから接続するネットワークを検索します。その後、ステータスは NetworkCallback に報告されます。

KotlinJava
val connectivityManager = getSystemService(ConnectivityManager::class.java) as ConnectivityManager
connectivityManager.requestNetwork(networkRequest, networkCallback)
ConnectivityManager connectivityManager =
        (ConnectivityManager) getSystemService(ConnectivityManager.class);
connectivityManager.requestNetwork(networkRequest, networkCallback);