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.
Kotlin
val networkRequest = NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET) .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) .build()
Java
NetworkRequest networkRequest = new 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 bisa 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 dalamNetworkRequest.onLost()menunjukkan bahwa perangkat telah kehilangan koneksi ke jaringan.onCapabilitiesChanged()menunjukkan bahwa kemampuan jaringan telah berubah. ObjekNetworkCapabilitiesmemberikan informasi tentang kemampuan jaringan saat ini.
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); } };
Mendaftar untuk mendapatkan info terbaru tentang 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.
Kotlin
val connectivityManager = getSystemService(ConnectivityManager::class.java) as ConnectivityManager connectivityManager.requestNetwork(networkRequest, networkCallback)
Java
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(ConnectivityManager.class); connectivityManager.requestNetwork(networkRequest, networkCallback);