ConnectivityManager, cihazın özelliklerini ve veri aktarım seçeneklerini içeren çeşitli koşullara göre cihazın bir ağa bağlanmasını istemenizi sağlayan bir API sunar.
Geri çağırma uygulaması, uygulamanıza cihazın bağlantı durumu ve o anda bağlı olan ağın özellikleri hakkında bilgi sağlar. API, cihazın uygulamanızın gereksinimlerini karşılayan bir ağa bağlı olup olmadığını belirlemenize olanak tanır.
Ağ isteği yapılandırma
Ağın aktarım türünü (ör. kablosuz veya hücresel bağlantı) ve o 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 beyan edin. Aşağıdaki kod, internete bağlı olan ve taşıma türü için kablosuz, ethernet veya hücresel bağlantı kullanan bir ağ için istek oluşturur.
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();
Bazı bağlantıların diğerlerinden çok daha pahalı olabileceğini unutmayın (örneğin, mobil bağlantı genellikle pahalıdır). Bağlantının pahalı olup olmadığını belirlemek için
NetworkCapabilities#NET_CAPABILITY_NOT_METERED
kullanın. Sayaçlı bağlantı kullanırken uygulamanızın veri tüketimini azaltmaya çalışın veya cihaz sayaçsız bağlantı kullanana kadar veri tüketimini geciktirin.
Ağ geri çağırma işlevini yapılandırma
NetworkRequest cihazını ConnectivityManager ile kaydettiğinizde, bağlantı durumu ve ağ özelliklerindeki değişikliklerle ilgili bildirimleri almak için bir NetworkCallback uygulamanız gerekir.
NetworkCallback içinde en sık uygulanan işlevler şunlardır:
onAvailable(), cihazınNetworkRequestiçinde belirtilen özellikleri 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ın kesildiğini gösterir.onCapabilitiesChanged()ağın özelliklerinin değiştiğini gösterir.NetworkCapabilitiesnesnesi, 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 değerlerini beyan ettikten sonra, cihazdan bağlanılacak ve NetworkRequest değerini 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);