ConnectivityManager
, cihazın cihaz özellikleri ve veri aktarma 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 koşullarını karşılayan bir ağa bağlı olup olmadığını belirlemenizi 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
simgesini 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
'ü ConnectivityManager
'a kaydettiğinizde, bağlantı durumundaki ve ağ özelliklerindeki değişikliklerle ilgili bildirimler 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
'yi tanımladıktan sonra, cihazdan bağlanacak ve NetworkRequest
koşulunu karşılayan bir ağ aramak için requestNetwork()
veya registerNetworkCallback()
işlevlerini kullanın. Ardından durum NetworkCallback
'e 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);