Memantau status konektivitas dan pengukuran koneksi

ConnectivityManager menyediakan API yang memungkinkan Anda meminta perangkat terhubung ke jaringan berdasarkan berbagai kondisi yang mencakup kemampuan perangkat dan opsi transportasi data.

Implementasi callback memberikan informasi kepada aplikasi Anda tentang status koneksi perangkat serta kemampuan jaringan yang saat ini terhubung. API ini memungkinkan Anda menentukan apakah perangkat saat ini terhubung ke jaringan yang memenuhi persyaratan aplikasi Anda.

Mengonfigurasi permintaan jaringan

Untuk menentukan jenis transportasi jaringan, seperti koneksi Wi-Fi atau seluler, dan kemampuan jaringan yang saat ini terhubung, seperti koneksi internet, Anda harus mengonfigurasi permintaan jaringan.

Deklarasikan NetworkRequest yang menjelaskan kebutuhan koneksi jaringan aplikasi Anda. Kode berikut membuat permintaan untuk jaringan yang terhubung ke internet dan menggunakan koneksi Wi-Fi, ethernet, atau seluler untuk jenis transport.

private val networkRequest = NetworkRequest.Builder()
    .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
    .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET)
    .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
    .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
    .build()

Perlu diperhatikan bahwa beberapa koneksi dapat jauh lebih mahal daripada yang lain (misalnya, koneksi seluler biasanya mahal). Gunakan NetworkCapabilities#NET_CAPABILITY_NOT_METERED untuk menentukan apakah koneksi tersebut mahal. Saat menggunakan koneksi berkuota, coba kurangi konsumsi data aplikasi Anda, atau tunda hingga perangkat memiliki koneksi tanpa kuota.

Mengonfigurasi callback jaringan

Saat mendaftarkan NetworkRequest dengan ConnectivityManager, Anda harus mengimplementasikan NetworkCallback untuk menerima notifikasi tentang perubahan status koneksi dan kemampuan jaringan.

Fungsi yang paling umum diterapkan di NetworkCallback mencakup hal berikut:

  • onAvailable() menunjukkan bahwa perangkat terhubung ke jaringan baru yang memenuhi persyaratan kemampuan dan jenis transpor yang ditentukan dalam NetworkRequest.
  • onLost() menunjukkan bahwa perangkat telah kehilangan koneksi ke jaringan.
  • onCapabilitiesChanged() menunjukkan bahwa kemampuan jaringan telah berubah. Objek NetworkCapabilities memberikan informasi tentang kemampuan jaringan saat ini.

private val networkCallback = object : ConnectivityManager.NetworkCallback() {
    override fun onAvailable(network: Network) {
        // Network is available for use.
    }

    // Network capabilities have changed for the network.
    override fun onCapabilitiesChanged(
        network: Network,
        networkCapabilities: NetworkCapabilities
    ) {
        val unmetered =
            networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)
        if (!unmetered) {
            // Reduce data usage, or delay it until the network is unmetered.
        }
    }

    override fun onLost(network: Network) {
        // Lost network connection.
    }
}

Mendaftar untuk mendapatkan info terbaru jaringan

Setelah mendeklarasikan NetworkRequest dan NetworkCallback, gunakan fungsi requestNetwork() atau registerNetworkCallback() untuk menelusuri jaringan yang akan dihubungkan dari perangkat yang memenuhi NetworkRequest. Status tersebut kemudian dilaporkan ke NetworkCallback.

val connectivityManager = getSystemService(ConnectivityManager::class.java)
connectivityManager.registerNetworkCallback(networkRequest, networkCallback)