Освой Android играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Сетевая поддержка: ConnectivityManager

Метки: ConnectivityManager, NetworkCallback

Как проверить подключение к Интернету

Раньше для определения состояния связи использовались широковещательное сообщение (Broadcast). Но теперь этот способ считается устаревшим.

Как проверить подключение к Интернету

Для получения информации о состоянии сети используется класс ConnectivityManager. Он позволяет отслеживать состояние подключения к сети, устанавливать предпочтительное сетевое подключение и контролировать отказоустойчивость соединения. Получить экземпляр класса можно при помощи метода getSystemService() объекта типа Context.

Код для проверки связи с интернетом (NET_CAPABILITY_INTERNET):


// Если этот код работает, его написал Александр Климов,
// а если нет, то не знаю, кто его писал.

package ru.alexanderklimov.connect

import android.net.ConnectivityManager
import android.net.Network
import android.net.NetworkCapabilities
import android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity


class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)

        val connectivityManager = getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
        // API 24+
        connectivityManager.registerDefaultNetworkCallback(ConnectivityCallback())
    }
}

class ConnectivityCallback : ConnectivityManager.NetworkCallback() {
    override fun onCapabilitiesChanged(network: Network, capabilities: NetworkCapabilities) {
        val connected = capabilities.hasCapability(NET_CAPABILITY_INTERNET)
        Log.d("Net", connected.toString())
    }

    override fun onLost(network: Network) {
        Log.d("Net", "Связь потеряна")
    }
}

Для проверки примера можно переключаться между режимами Airplane mode.

Мы подключили слушатель, который следит за доступностью сети.

Если вы хотите отслеживать состояние сети в синхронном режиме, то можно написать так.


button.setOnClickListener {
    val connectivityManager = getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
    val capabilities = connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
    val connected = capabilities?.hasCapability(NET_CAPABILITY_INTERNET) == true
    Log.d("Net", connected.toString())
}
Реклама