android - NetworkInfo 已被 API 29 弃用

标签 android kotlin deprecated networkinfo

这个问题在这里已经有了答案:





getActiveNetworkInfo() is deprecated in API 29 [duplicate]

(3 个回答)



activeNetworkInfo.type is deprecated in API level 28

(16 个答案)


2年前关闭。




我想检查网络连接。所以,我用了ConnectivityManager.activateNetworkInfo.isConnected
不幸的是,这在 API 29 中已被弃用。

private fun isOnline(): Boolean {
    val connectivityManager = appContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val networkInfo = connectivityManager.activeNetworkInfo
    return networkInfo != null && networkInfo.isConnected
}

你可以在这里看到折旧信息

enter image description here

最佳答案

基于 Google Document 已弃用

  • getActiveNetworkInfo 在 API 29 上已弃用。
  • getAllNetworkInfo 在 API 23 上已弃用。

  • 因此,如果要查找网络连接状态,可以使用此代码。
    Kotlin :
     private fun isNetworkAvailable(context: Context): Boolean {
        val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            val nw      = connectivityManager.activeNetwork ?: return false
            val actNw = connectivityManager.getNetworkCapabilities(nw) ?: return false
            return when {
                actNw.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true
                actNw.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
                //for other device how are able to connect with Ethernet
                actNw.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> true
                //for check internet over Bluetooth
                actNw.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH) -> true
                else -> false
            }
        } else {
            return connectivityManager.activeNetworkInfo?.isConnected ?: false
        }
    }
    
    java :
    private Boolean isNetworkAvailable(Application application) {
        ConnectivityManager connectivityManager = (ConnectivityManager) application.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            Network nw = connectivityManager.getActiveNetwork();
            if (nw == null) return false;
            NetworkCapabilities actNw = connectivityManager.getNetworkCapabilities(nw);
            return actNw != null && (actNw.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || actNw.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) || actNw.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) || actNw.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH));
        } else {
            NetworkInfo nwInfo = connectivityManager.getActiveNetworkInfo();
            return nwInfo != null && nwInfo.isConnected();
        }
    }
    
    你可以看到所有NetworkCapability这里。

    关于android - NetworkInfo 已被 API 29 弃用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57284582/

    相关文章:

    android - Google Maps API v2 无法显示 map

    android - 如何为 android 制作 instagram 操作栏样式?

    java - Intellij IDEA Kotlin - 如何在同一列中发表评论?

    android - 从多个状态流中收集

    安卓平板电脑图标大小

    android - SDK或ADT如何为Android应用包的Res​​ources生成SHA1-Digest

    android - 将触摸事件从对话框 fragment 传递到下方的 View (在父 Activity 内)

    php - 如何在 PHP 5.3 中强制使用 error_reporting 模式

    ruby-on-rails - rails 1.2 "service is deprecated"

    python - scikit-learn GaussianProcessRegressor vs GaussianProcess?为什么 GaussianProcess 在 0.18 版本中被弃用?