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 o anda etkin olup olmadığını bir ağa bağlı olmanız gerekir.

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.

Şu özelliklere sahip bir NetworkRequest bildirin: uygulamanızın ağ bağlantısı ihtiyaçlarını tanımlar. Aşağıdaki kod, internete bağlı olan ve kablosuz bağlantı kullanan bir ağ için istekte bulunma hücresel bağlantıya sahip olabilir.

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). Tekliflerinizi otomatikleştirmek ve optimize etmek için NetworkCapabilities#NET_CAPABILITY_NOT_METERED ve bağlantının ücretli olup olmadığını kontrol edin. Sayaçlı bağlantı kullanırken uygulamanızın veri tüketimini azaltmaya çalışın veya cihaz yayımlanana kadar sayaçsız bağlantı.

Ağa geri çağırma yapılandırma

NetworkRequest öğesini ConnectivityManager ile kaydettiğinizde bir NetworkCallback bağlantı durumu ve ağ değişiklikleri hakkında bildirim almak için özellikler.

NetworkCallback ürününde en sık uygulanan işlevler şunlardır: takip etmek için:

  • onAvailable() cihazın, özellikler ve aktarım türü gereksinimleri (NetworkRequest).
  • 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 beyan ettikten sonra, requestNetwork() veya registerNetworkCallback() uygun olan cihazdan bağlanacak ağı arama işlevine NetworkRequest 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);