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

ConnectivityManager, cihaz özellikleri ve veri aktarma seçeneklerini de içeren çeşitli koşullara göre 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 bilgiler 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 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ü 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 ç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 değerini 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 işlemi geciktirin.

Ağa geri çağırma 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ın NetworkRequest içinde 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 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 kaydol

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