ConnectivityManager
, cihazın cihaz özellikleri ve veri aktarımı seçenekleri gibi çeşitli koşullara göre bir ağa bağlanmasını istemenizi sağlayan bir API sağlar.
Geri çağırma uygulaması, uygulamanıza cihazın bağlantı durumu ve şu anda bağlı olan ağın özellikleri hakkında bilgi sağlar. API, cihazın şu anda uygulamanızın gereksinimlerini karşılayan bir ağa bağlı olup olmadığını belirleyebilmenizi sağlar.
Ağ isteğini yapılandırma
Ağın aktarım türünü (ör. kablosuz veya hücresel bağlantı) ve şu anda bağlı olan ağın özelliklerini (ör. internet bağlantısı) belirtmek için bir ağ isteği yapılandırmanız gerekir.
Uygulamanızın ağ bağlantısı ihtiyaçlarını açıklayan bir NetworkRequest
tanımlayın. Aşağıdaki kod, internete bağlı bir ağ için istek oluşturur ve aktarım türü için kablosuz veya hücresel bağlantı kullanır.
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();
Bazı bağlantıların diğerlerine kıyasla çok daha pahalı olabileceğini unutmayın (ör. mobil bağlantılar genellikle pahalıdır). Bağlantının pahalı olup olmadığını belirlemek için NetworkCapabilities#NET_CAPABILITY_NOT_METERED
değerini kullanın. Sınırlı bağlantı kullanıyorsanız uygulamanızın veri tüketimini azaltmayı veya cihazın sınırsız bağlantıya sahip olduğu zamana kadar ertelemeyi deneyin.
Ağ geri çağırma işlevini yapılandırma
NetworkRequest
öğesini ConnectivityManager
ile kaydettiğinizde, bağlantı durumu ve ağ özelliklerindeki değişiklikler hakkında bildirim almak için bir NetworkCallback
uygulamanız gerekir.
NetworkCallback
'te en yaygın olarak uygulanan işlevler şunlardır:
onAvailable()
, cihazınNetworkRequest
'da belirtilen özellikler ve aktarım türü şartlarını karşılayan yeni bir ağa bağlı olduğunu gösterir.onLost()
, cihazın ağ bağlantısını kaybettiğini gösterir.onCapabilitiesChanged()
ağın özelliklerinin değiştiğini gösterir.NetworkCapabilities
nesnesi, ağın mevcut özellikleri hakkında bilgi sağlar.
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); } };
Ağ güncellemelerine kaydolma
NetworkRequest
ve NetworkCallback
tanımladıktan sonra, NetworkRequest
şartlarına uygun cihazdan bağlanacak ağı aramak için requestNetwork()
veya registerNetworkCallback()
işlevlerini kullanın. Durum, daha sonra NetworkCallback
şirketine bildirilir.
Kotlin
val connectivityManager = getSystemService(ConnectivityManager::class.java) as ConnectivityManager connectivityManager.requestNetwork(networkRequest, networkCallback)
Java
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(ConnectivityManager.class); connectivityManager.requestNetwork(networkRequest, networkCallback);