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

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ı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ın kesildiğini gösterir.
  • onCapabilitiesChanged() , ağın özelliklerinin değiştiğini gösterir. İlgili içeriği oluşturmak için kullanılan NetworkCapabilities 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);