ConnectivityManager
,
Cihazın bir ağa bağlanmasını istemenize olanak tanıyan bir API'ye
cihaz özellikleri ve veri aktarım seçeneklerini içeren çeşitli koşullar.
Geri çağırma uygulaması, uygulamanıza cihazın ve o anda bağlı olan cihazın özellikleri hakkında ağ. 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ü belirtmek için (ör. kablosuz veya hücresel) bağlantısını ve o anda bağlı olan ağın internet gibi özelliklerini 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ğ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
simgesini kullanın. Sınırlı bağlantı kullanıyorsanız uygulamanızın veri tüketimini azaltmayı deneyin veya cihaz sınırsız bağlantıya sahip olana kadar uygulamayı erteleyin.
Ağ geri çağırma işlevini yapılandırma
NetworkRequest
öğesini ConnectivityManager
ile kaydettiğinizde
Google Etiket Yöneticisi'ni kullanarak
NetworkCallback
bağlantı durumu ve ağ değişiklikleri hakkında bildirim almak için
özellikler.
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ın kesildiğini gösterir.onCapabilitiesChanged()
, ağın özelliklerinin değiştiğini gösterir. İlgili içeriği oluşturmak için kullanılanNetworkCapabilities
nesne 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 kaydol
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. 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);