Как проверить подключение к Интернету в Android программно с помощью Kotlin

Чтобы проверить подключение к Интернету в приложении Android программным способом с помощью Kotlin, вы можете использовать несколько методов. Вот несколько примеров:

Метод 1: использование класса ConnectivityManager

import android.content.Context
import android.net.ConnectivityManager
import android.net.NetworkCapabilities
fun isInternetConnected(context: Context): Boolean {
    val connectivityManager =
        context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val network = connectivityManager.activeNetwork
    val networkCapabilities = connectivityManager.getNetworkCapabilities(network)
    return networkCapabilities?.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
        ?: false
}

Метод 2: использование класса NetworkInfo (не рекомендуется на уровне API 29)

import android.content.Context
import android.net.ConnectivityManager
import android.net.NetworkInfo
fun isInternetConnected(context: Context): Boolean {
    val connectivityManager =
        context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val networkInfo: NetworkInfo? = connectivityManager.activeNetworkInfo
    return networkInfo != null && networkInfo.isConnected
}

Метод 3. Использование запроса Ping

import java.io.IOException
import java.net.InetSocketAddress
import java.net.Socket
fun isInternetConnected(): Boolean {
    return try {
        val timeoutMs = 1500
        val socket = Socket()
        val socketAddress = InetSocketAddress("8.8.8.8", 53)
        socket.connect(socketAddress, timeoutMs)
        socket.close()
        true
    } catch (e: IOException) {
        false
    }
}

Метод 4. Использование разрешения Интернета в манифесте
Добавьте следующее разрешение в файл AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET" />

Затем вы можете использовать следующий метод для проверки подключения к Интернету:

import java.net.InetAddress
fun isInternetConnected(): Boolean {
    return try {
        val address: InetAddress = InetAddress.getByName("www.google.com")
        !address.equals("")
    } catch (e: Exception) {
        false
    }
}