Bağlantı durumunu ve bağlantı sayacını izleme

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 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

NetworkRequestConnectivityManager'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ın NetworkRequest'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);