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 sunar.
Geri çağırma uygulaması, cihazın bağlantı durumu ve şu anda bağlı olan ağın özellikleri hakkında uygulamanıza bilgi sağlar. API, cihazın şu anda uygulamanızın gereksinimlerini karşılayan bir ağa bağlı olup olmadığını belirlemenizi sağlar.
Ağ isteği 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
beyan edin. Aşağıdaki kod, internete bağlı ve aktarım türü olarak kablosuz ya da 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 önemli ölçüde daha pahalı olabileceğini (örneğin, mobil bağlantı genellikle pahalıdır) unutmayın. Bağlantının pahalı olup olmadığını belirlemek için
NetworkCapabilities#NET_CAPABILITY_NOT_METERED
öğesini kullanın. Ölçülü bağlantı kullanırken uygulamanızın veri tüketimini azaltmaya çalışın veya cihaz ölçüsüz bir bağlantıya sahip olana kadar veri tüketimini erteleyin.
Ağ geri çağırmasını yapılandırma
NetworkRequest
cihazını ConnectivityManager
ile kaydettiğinizde, bağlantı durumundaki ve ağ özelliklerindeki değişikliklerle ilgili bildirimler almak için NetworkCallback
uygulamanız gerekir.
NetworkCallback
'da en sık uygulanan işlevler şunlardır:
onAvailable()
Cihazın,NetworkRequest
içinde belirtilen özellik ve aktarım türü şartlarını karşılayan yeni bir ağa bağlı olduğunu gösterir.onLost()
simgesi, cihazın ağ bağlantısının kesildiğ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
cihazlarını beyan ettikten sonra, NetworkRequest
cihazının gereksinimlerini karşılayan bir ağ aramak için requestNetwork()
veya registerNetworkCallback()
işlevlerini kullanın. Durum daha sonra NetworkCallback
'ya 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);