Skip to content

Instantly share code, notes, and snippets.

@ShinichiroFunatsu
Created June 23, 2020 09:20
Show Gist options
  • Save ShinichiroFunatsu/f287111b3f345466ea4bd80af1087b73 to your computer and use it in GitHub Desktop.
Save ShinichiroFunatsu/f287111b3f345466ea4bd80af1087b73 to your computer and use it in GitHub Desktop.
NetworkInfo.isConnected another option due to NetworkInfo deprecated.
enum class NetworkType {
WIFI, MOBILE, VPN, OTHER
}
object NetworkConnectivityChecker {
@JvmStatic
fun isConnected(context: Context): Boolean {
val connectivityManager: ConnectivityManager = context.getSystemService() ?: return false
val networkType = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
getNetworkTypeForM(connectivityManager)
} else {
getNetworkTypeLegacy(connectivityManager)
}
return networkType != null
&& networkType != NetworkType.OTHER
}
@RequiresApi(Build.VERSION_CODES.M)
private fun getNetworkTypeForM(connectivityManager: ConnectivityManager): NetworkType? {
val nc: NetworkCapabilities =
connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
?: return null
return when {
nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> NetworkType.WIFI
nc.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> NetworkType.MOBILE
nc.hasTransport(NetworkCapabilities.TRANSPORT_VPN) -> NetworkType.VPN
else -> NetworkType.OTHER
}
}
@Suppress("DEPRECATION")
private fun getNetworkTypeLegacy(connectivityManager: ConnectivityManager): NetworkType? {
val nInfo = connectivityManager.activeNetworkInfo
?: return null
return when (nInfo.type) {
ConnectivityManager.TYPE_WIFI -> NetworkType.WIFI
ConnectivityManager.TYPE_MOBILE -> NetworkType.MOBILE
ConnectivityManager.TYPE_VPN -> NetworkType.VPN
else -> NetworkType.OTHER
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment