ConnectivityManager
, cihaz özelliklerini ve veri aktarım seçeneklerini de içeren çeşitli koşullara dayalı olarak cihazın bir ağa bağlanmasını istemenize olanak tanıyan 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ğini yapılandırma
Ağın aktarım türünü (kablosuz veya hücresel bağlantı gibi) ve o anda bağlı olan ağın internet bağlantısı gibi özelliklerini belirtmek için 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ı olan ve aktarım türü için kablosuz 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_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ğ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
özelliğini kullanın. Sayaçlı bir bağlantı kullanırken uygulamanızın veri tüketimini azaltmaya çalışın veya cihaz sayaçsız bir bağlantıya sahip oluncaya kadar veri kullanımını geciktirin.
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
içinde en sık uygulanan işlevler şunlardır:
onAvailable()
, cihazınNetworkRequest
maddesinde belirtilen özellikleri ve aktarım türü gereksinimlerini karşılayan yeni bir ağa bağlı olduğunu gösterir.onLost()
cihazın ağ bağlantısının kesildiğini belirtir.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üncellemeleri için kaydolun
NetworkRequest
ve NetworkCallback
tanımlandıktan sonra, NetworkRequest
şartlarını karşılayan cihazdan bağlanacak bir ağ aramak için requestNetwork()
veya registerNetworkCallback()
işlevlerini kullanın. Ardından, durum NetworkCallback
ekibine 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);