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 gereksinimlerini karşılayan bir ağa bağlı olup olmadığını belirleyebilmenizi 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 değerini 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

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'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 tanımladıktan sonra, NetworkRequest şartlarına uygun cihazdan bağlanacak 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);