android10解决NetworkInfo废弃替代NetworkInfo isConnected()问题
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()问题相关推荐
- [高通MSM8953_64][Android10]解决制作差分包不生成system_manifest.xml的问题
文章目录 开发平台基本信息 问题描述 解决方法 开发平台基本信息 芯片: MSM8953_64 版本: Android 10 kernel: msm-4.9 问题描述 设备在调试OTA升级功能的时候, ...
- 导入项目出现: Unable to resolve target ‘android-10′ 解决办法
进入到android项目根目录下,打开项目文件project.properties ,修改 target=android-10 的值.把10改为当前虚拟机API level的版本即可.我这里改为17 ...
- 解决Android 8.1 获取不到wifi名称
在安卓8.1版本中,用 WifiInfo.getSSID() ,可能出现 unknown ssid 或者什么也没读出来 解决方案 :用ConnectivityManager 这个类解决. 代码如下: ...
- php fsockopen permission denied,php fsockopen()函数禁用解决办法
fsockopen函数是一个可以实现远程登录访问的一个函数了,当然也是一个相对来说比较危险的函数了,很多主机商都直接把fsockopen函数给禁用了,那么像有些cms会需要用到这个函数,像ecshop ...
- Android WiFi(一)
Android WiFi WiFi相关的知识点,我是第一次接触,所以比较零碎 Wifi基础知识 史上最全讲解:WiFi知识 Linux 下wifi 驱动开发(一)-- WiFi基础知识解析 WIFI基 ...
- Android 4.0 SDK新特性
Android 4.0 是一次重要的平台发布版,为用户和应用程序开发者增加了大量的新特性.在下面我们将讨论的所有新特性和API中,因为它将 Android 3.x 版本中广泛使用的API和全息图像主题 ...
- Android4.0 SDK新功能详解
Android 4.0 平台 API等级:14 Android 4.0 是一次重要的平台发布版,为用户和应用程序开发者增加了大量的新特性.在下面我们将讨论的所有新特性和API中,因为它将 Androi ...
- Android 4.0 平台特性
Android 4.0 平台特性 API等级:14 Android4.0 是一次重要的平台发布版,为用户和应用程序开发者增加了大量的新特性.在下面我们将讨论的所有新特性和API中,因为它将 Andr ...
- Android4.0新特性 中文翻译
转自http://www.eoeandroid.com/thread-103300-1-1.html android4.0 SDK发布有一段时间了,在eoe上找到了翻译过的新特性说明,特转载 Andr ...
- Android 4.0新特性(中文)
Android 4.0新特性(中文) 转自http://www.eoeandroid.com/thread-103300-1-1.html android4.0 SDK发布有一段时间了,在eoe上找到 ...
最新文章
- Ubuntu中Atom安装与使用
- 面了大厂的 Python 岗后,炸了!
- 图像分割2020总结:结构,损失函数,数据集和框架
- Bash 文件夹操作
- shell脚本中执行mysql 语句,去除warning using a password on the command line interface can be insecure信息...
- PDF页眉页脚怎么设置
- 南瑞变压器保护装置说明书_电力试验:变压器感应耐压试验(二)
- [蓝桥杯][2014年第五届真题]分糖果-模拟
- Log4j2进阶使用(Pattern Layout详细设置)
- 最流行的自动化测试工具,总有一款适合你
- java tomcat 读取配置文件端口_跟我学Java编程—应用读写项目配置文件的Properties类...
- Eratosthenes筛选法
- 大数据营销有哪些价值
- 深入解读Linux内存管理系列(4)——Memblock管理机制
- 文远知行公布自动驾驶运营路线图:全新升级自动驾驶方案,建立500辆规模的自动驾驶车队...
- 系统分析师教程电子版资料收集
- 易语言怎么给手机发短信
- 上海计算机一级excel试题及答案,2016年计算机一级excel试题及答案
- 石墨烯 量子计算机,带石墨烯的量子计算
- 基于TVUE框架在中型移动端项目的直出同构实践
热门文章
- xshell与虚拟机VMware中centos6.7系统突然连不上
- 【CF Contest-1251 E2】Voting (Hard Version)【贪心】
- 长链剖分算法完整总结
- 随机变量的原点矩、中心距、变异系数
- Charlotte:不会被检测到的Shellcode启动器
- Raki的读paper小记:Enhanced Language Representation with Label Knowledge for Span Extraction
- apache服务上配置https安全与域名请求
- C# ADO.NET中设置Like模糊查询
- python基本使用时常见错误
- Linux下安装、配置、启动Apache