android10解决NetworkInfo废弃替代NetworkInfo isConnected()问题

最近新项目接近尾声,进入处理疑难杂症阶段;着手处理各种兼容性问题。在监听系统网络广播变化方面遇到了一个问题,在Android 10 (系统sdk版本29)NetworkInfo被标记为Deprecated废弃状态,就是不推荐大家继续使用了。那么我们在Android10怎样判断网络类型和网络是否连接。

总所周知,Android一直以来通过NetworkInfo#getType()来判断网络连接类型


/** 判断网络类型:移动网络 */
public static boolean isMobile(Context) {ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo networkInfo = cm.getActiveNetworkInfo();return null != networkInfo && networkInfo.getType() == ConnectivityManager.TYPE_MOBILE;
}/** 判断网络类型:Wi-Fi类型 */
public static boolean isWifi(Context) {ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo networkInfo = cm.getActiveNetworkInfo();return null != networkInfo && networkInfo.getType() == ConnectivityManager.TYPE_WIFI;
}/** 判断网络是否连接 */
public static boolean isConnected(Context) {ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo networkInfo = cm.getActiveNetworkInfo();return null != networkInfo && networkInfo.isConnected();
}

当时非常不幸,到了Android10 NetworkInfo被标记为废弃了,系统不推荐通过NetworkInfo#getType()判断网络类型,以及通过NetworkInfo#isConnected()判断网络是否联通。

经过一番搜索和资料查询,查到针对Android10,我们可以通过NetworkCapabilities判断网络类型和判断网络是否连接;

/*** android10版本* 判断网络类型:移动网络*/
public static boolean isMobileQ29(Context) {ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);Network network = cm.getActiveNetwork();if (null == network) {return false;}NetworkCapabilities capabilities = cm.getActiveNetworkCapabilities(network);if (null == capabilities) {return false;}return capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR);
}/*** android10版本* 判断网络类型:Wi-Fi类型*/
public static boolean isWifiQ29(Context) {ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);Network network = cm.getActiveNetwork();if (null == network) {return false;}NetworkCapabilities capabilities = cm.getActiveNetworkCapabilities(network);if (null == capabilities) {return false;}return capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI);
}/*** android10版本* 判断网络是否连接*/
public static boolean isConnectedQ29(Context) {ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);Network network = cm.getActiveNetwork();if (null == network) {return false;}NetworkCapabilities capabilities = cm.getActiveNetworkCapabilities(network);if (null == capabilities) {return false;}return capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
}

监听网络变化广播,也不同了。不推荐继续使用ConnectivityManager#CONNECTIVITY_ACTION广播。而是用NetworkCallback进行监听

示例代码如下:

/*** Android10监听网络变化广播*/
ConnectivityManager.NetworkCallback callback = new ConnectivityManager.NetworkCallback() {// 可用网络接入public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) {// 一般在此处获取网络类型然后判断网络类型,就知道时哪个网络可以用connected}// 网络断开public void onLost(Network network) {// 如果通过ConnectivityManager#getActiveNetwork()返回null,表示当前已经没有其他可用网络了。}
}// 注册回调
private void registerNetworkCallback(Context context) {ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkRequest.Builder builder = new NetworkRequest.Builder();builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);cm.registerNetworkCallback(builder.build(), callback);
}// 注销回调
private void unregisterNetworkCallback(Context context) {ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);cm.unregisterNetworkCallback(callback);
}

android10解决NetworkInfo废弃替代NetworkInfo isConnected()问题相关推荐

  1. [高通MSM8953_64][Android10]解决制作差分包不生成system_manifest.xml的问题

    文章目录 开发平台基本信息 问题描述 解决方法 开发平台基本信息 芯片: MSM8953_64 版本: Android 10 kernel: msm-4.9 问题描述 设备在调试OTA升级功能的时候, ...

  2. 导入项目出现: Unable to resolve target ‘android-10′ 解决办法

    进入到android项目根目录下,打开项目文件project.properties ,修改 target=android-10  的值.把10改为当前虚拟机API level的版本即可.我这里改为17 ...

  3. 解决Android 8.1 获取不到wifi名称

    在安卓8.1版本中,用 WifiInfo.getSSID() ,可能出现 unknown ssid 或者什么也没读出来 解决方案 :用ConnectivityManager 这个类解决. 代码如下: ...

  4. php fsockopen permission denied,php fsockopen()函数禁用解决办法

    fsockopen函数是一个可以实现远程登录访问的一个函数了,当然也是一个相对来说比较危险的函数了,很多主机商都直接把fsockopen函数给禁用了,那么像有些cms会需要用到这个函数,像ecshop ...

  5. Android WiFi(一)

    Android WiFi WiFi相关的知识点,我是第一次接触,所以比较零碎 Wifi基础知识 史上最全讲解:WiFi知识 Linux 下wifi 驱动开发(一)-- WiFi基础知识解析 WIFI基 ...

  6. Android 4.0 SDK新特性

    Android 4.0 是一次重要的平台发布版,为用户和应用程序开发者增加了大量的新特性.在下面我们将讨论的所有新特性和API中,因为它将 Android 3.x 版本中广泛使用的API和全息图像主题 ...

  7. Android4.0 SDK新功能详解

    Android 4.0 平台 API等级:14 Android 4.0 是一次重要的平台发布版,为用户和应用程序开发者增加了大量的新特性.在下面我们将讨论的所有新特性和API中,因为它将 Androi ...

  8. Android 4.0 平台特性

    Android 4.0 平台特性 API等级:14  Android4.0 是一次重要的平台发布版,为用户和应用程序开发者增加了大量的新特性.在下面我们将讨论的所有新特性和API中,因为它将 Andr ...

  9. Android4.0新特性 中文翻译

    转自http://www.eoeandroid.com/thread-103300-1-1.html android4.0 SDK发布有一段时间了,在eoe上找到了翻译过的新特性说明,特转载 Andr ...

  10. Android 4.0新特性(中文)

    Android 4.0新特性(中文) 转自http://www.eoeandroid.com/thread-103300-1-1.html android4.0 SDK发布有一段时间了,在eoe上找到 ...

最新文章

  1. Ubuntu中Atom安装与使用
  2. 面了大厂的 Python 岗后,炸了!
  3. 图像分割2020总结:结构,损失函数,数据集和框架
  4. Bash 文件夹操作
  5. shell脚本中执行mysql 语句,去除warning using a password on the command line interface can be insecure信息...
  6. PDF页眉页脚怎么设置
  7. 南瑞变压器保护装置说明书_电力试验:变压器感应耐压试验(二)
  8. [蓝桥杯][2014年第五届真题]分糖果-模拟
  9. Log4j2进阶使用(Pattern Layout详细设置)
  10. 最流行的自动化测试工具,总有一款适合你
  11. java tomcat 读取配置文件端口_跟我学Java编程—应用读写项目配置文件的Properties类...
  12. Eratosthenes筛选法
  13. 大数据营销有哪些价值
  14. 深入解读Linux内存管理系列(4)——Memblock管理机制
  15. 文远知行公布自动驾驶运营路线图:全新升级自动驾驶方案,建立500辆规模的自动驾驶车队...
  16. 系统分析师教程电子版资料收集
  17. 易语言怎么给手机发短信
  18. 上海计算机一级excel试题及答案,2016年计算机一级excel试题及答案
  19. 石墨烯 量子计算机,带石墨烯的量子计算
  20. 基于TVUE框架在中型移动端项目的直出同构实践

热门文章

  1. xshell与虚拟机VMware中centos6.7系统突然连不上
  2. 【CF Contest-1251 E2】Voting (Hard Version)【贪心】
  3. 长链剖分算法完整总结
  4. 随机变量的原点矩、中心距、变异系数
  5. Charlotte:不会被检测到的Shellcode启动器
  6. Raki的读paper小记:Enhanced Language Representation with Label Knowledge for Span Extraction
  7. apache服务上配置https安全与域名请求
  8. C# ADO.NET中设置Like模糊查询
  9. python基本使用时常见错误
  10. Linux下安装、配置、启动Apache