当前位置: 首页 > news >正文

物流企业网站建设通州网络推广

物流企业网站建设,通州网络推广,湖州微信网站建设,企业网站建设哪家最好一. 问题背景 Android12上#xff0c;有的app模块判断当前网络的类型和连接状态时#xff0c;还是使用的旧的API#xff0c;导致返回的结果不准确#xff0c;影响代码逻辑判断#xff0c;本篇文章就这一问题#xff0c;整理一下判断网络类型和连接状态的新方法。 二. 原因…一. 问题背景 Android12上有的app模块判断当前网络的类型和连接状态时还是使用的旧的API导致返回的结果不准确影响代码逻辑判断本篇文章就这一问题整理一下判断网络类型和连接状态的新方法。 二. 原因分析 在Android 10以前的版本大家都是通过NetworkInfo.java 的getType()方法获取网络类型通过isConnected()方法来判断是否连接上 判断网络连接的旧方法如下 1.是否连接 2. 网络类型 但是在Android10之后这些方法已过时官方不推荐使用我们先来看下官方的源码说明 左边是Android10右边是Android9的源码 ,   在10上已经标记Deprecated新加的注释也推荐了使用的API。 还有一个旧广播String CONNECTIVITY_ACTION android.net.conn.CONNECTIVITY_CHANGE  在Android 9之后也废弃不推荐使用之前的使用方法 看下官方说明 官方标记Deprecated是避免在高版本的设备上获取返回的网络状态不对并且给了推荐的API以Android10为一个分界点 之后的版本都推荐使用新的API方法。 三. 官方推荐API 官方推荐监控 Android 中的互联网连接可以使用ConnectivityManager类这是一个允许您查询网络状态的系统服务类,   还有一个NetworkCapabilities类代表活动网络的功能。 体使用方法如下 registerNetworkCallback()此函数注册一个NetworkCallback对象来监听网络状态变化。它以一个NetworkCallback对象作为参数。 unregisterNetworkCallback()此函数取消注册以前注册的NetworkCallback对象。 接下来重点关注NetworkCallback中的回调方法描述 回调方法 描述 onCapabilitiesChanged 当网络状态改变 但仍旧是可用状态时调用 onAvailable 网络连接成功通知可以使用的时候调用 onUnavailable 当网络连接超时或网络请求达不到可用要求时调用 onBlockedStatusChanged 当访问指定的网络被阻止或解除阻塞时调用 onLosing 当网络正在断开连接时调用 onLost 当网络已断开连接时调用 onLinkPropertiesChanged 当网络连接的属性被修改时调用 接下来再说一下 NetworkCapabilities.java类中的NET_CAPABILITY_VALIDATED字段描述为 表示此网络上的连接已成功验证。例如对于具有NET_CAPABILITY_INTERNET的网络这意味着已成功检测到INTERNET连接。 通过实际log来描述说明一下 1. 连接上可上网的wifi可看到VALIDATED的标记 2. 连接上需要认证和不能上网的wifi找不到VALIDATED标记 3. 用数据流量上网可以看到VALIDATED的标记 我们可以通过networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)这个方法作为连接可以正常上网的网络判断条件。进一步通过networkCapabilities.hasTransport方法来判断当前的网络类型。 四. 使用方法 看代码更直接一点 MainActivity.java SuppressLint(NewApi) public class MainActivity extends AppCompatActivity {private static final String TAG ConnectManager;private ConnectivityManager networkService;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);networkService (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);if (networkService ! null) {//注册 NetworkCallBacknetworkService.registerDefaultNetworkCallback(networkCallBack);}}/** 测试网络工具类方法* */Overrideprotected void onResume() {super.onResume();//Log.e(TAG, 在onResume方法中判断 isMobileNetwork NetworkUtils.isMobileNetwork(this));//Log.e(TAG, 在onResume方法中判断 isWifiNetwork NetworkUtils.isWifiNetwork(this));//Log.e(TAG, 在onResume方法中判断 getConnectedNetworkType NetworkUtils.getConnectedNetworkType(this));}Overrideprotected void onDestroy() {super.onDestroy();if (networkService ! null networkCallBack ! null) {networkService.unregisterNetworkCallback(networkCallBack);}}private final ConnectivityManager.NetworkCallback networkCallBack new ConnectivityManager.NetworkCallback(){//当网络状态修改但仍旧是可用状态时调用Overridepublic void onCapabilitiesChanged(NonNull Network network, NonNull NetworkCapabilities networkCapabilities) {super.onCapabilitiesChanged(network, networkCapabilities);if (NetworkUtils.isConnectedAvailableNetwork(getBaseContext())) {Log.d(TAG, onCapabilitiesChanged --- 网络可正常上网网络类型为 NetworkUtils.getConnectedNetworkType(MainActivity.this));}//表明此网络连接验证成功if(networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)) {if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {Log.d(TAG, 当前在使用Mobile流量上网);} else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {Log.d(TAG, 当前在使用WiFi上网);} else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH)) {Log.d(TAG, 当前使用蓝牙上网);} else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) {Log.d(TAG, 当前使用以太网上网);} else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN)) {Log.d(TAG, 当前使用VPN上网);} else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI_AWARE)) {Log.d(TAG, 表示此网络使用Wi-Fi感知传输);} else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_LOWPAN)) {Log.d(TAG, 表示此网络使用LoWPAN传输);} else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_USB)) {Log.d(TAG, 表示此网络使用USB传输);}}}Overridepublic void onAvailable(NonNull Network network) {super.onAvailable(network);Log.e(TAG, 网络连接成功通知可以使用的时候调用onAvailable);}Overridepublic void onUnavailable() {Log.e(TAG, 当网络连接超时或网络请求达不到可用要求时调用onUnavailable);super.onUnavailable();}Overridepublic void onBlockedStatusChanged(NonNull Network network, boolean blocked) {Log.e(TAG, 当访问指定的网络被阻止或解除阻塞时调用onBlockedStatusChanged);super.onBlockedStatusChanged(network, blocked);}Overridepublic void onLosing(NonNull Network network, int maxMsToLive) {Log.e(TAG, 当网络正在断开连接时调用onLosing);super.onLosing(network, maxMsToLive);}Overridepublic void onLost(NonNull Network network) {Log.e(TAG, 当网络已断开连接时调用onLost);super.onLost(network);}Overridepublic void onLinkPropertiesChanged(NonNull Network network, NonNull LinkProperties linkProperties) {Log.e(TAG, 当网络连接的属性被修改时调用onLinkPropertiesChanged);super.onLinkPropertiesChanged(network, linkProperties);}};} 网络工具类NetworkUtils.java SuppressLint(NewApi) public class NetworkUtils {private static final String TAG ConnectManager;/*** Indicates this network uses a Cellular transport.*/public static final int TRANSPORT_CELLULAR 0;/*** Indicates this network uses a Wi-Fi transport.*/public static final int TRANSPORT_WIFI 1;/*** Indicates this network uses a Bluetooth transport.*/public static final int TRANSPORT_BLUETOOTH 2;/*** Indicates this network uses an Ethernet transport.*/public static final int TRANSPORT_ETHERNET 3;/*** Indicates this network uses a VPN transport.*/public static final int TRANSPORT_VPN 4;/*** Indicates this network uses a Wi-Fi Aware transport.*/public static final int TRANSPORT_WIFI_AWARE 5;/*** Indicates this network uses a LoWPAN transport.*/public static final int TRANSPORT_LOWPAN 6;/*** Indicates this network uses a Test-only virtual interface as a transport.* hide*/public static final int TRANSPORT_TEST 7;/*** Indicates this network uses a USB transport.*/public static final int TRANSPORT_USB 8;/*** Android 10Q版本推荐** 当前使用MOBILE流量上网*/public static boolean isMobileNetwork(Context context) {ConnectivityManager cm (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);Network network cm.getActiveNetwork();if (null network) {return false;}NetworkCapabilities capabilities cm.getNetworkCapabilities(network);if (null capabilities) {return false;}return capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);}/*** Android 10Q版本推荐** 当前使用WIFI上网*/public static boolean isWifiNetwork(Context context) {ConnectivityManager cm (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);Network network cm.getActiveNetwork();if (null network) {return false;}NetworkCapabilities capabilities cm.getNetworkCapabilities(network);if (null capabilities) {return false;}return capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);}/*** Android 10Q版本推荐** 当前使用以太网上网*/public static boolean isEthernetNetwork(Context context) {ConnectivityManager cm (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);Network network cm.getActiveNetwork();if (null network) {return false;}NetworkCapabilities capabilities cm.getNetworkCapabilities(network);if (null capabilities) {return false;}return capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);}/*** Android 10Q版本推荐** NetworkCapabilities.NET_CAPABILITY_INTERNET表示此网络应该(maybe)能够访问internet** 判断当前网络可以正常上网* 表示此连接此网络并且能成功上网。 例如对于具有NET_CAPABILITY_INTERNET的网络这意味着已成功检测到INTERNET连接。*/public static boolean isConnectedAvailableNetwork(Context context) {ConnectivityManager cm (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);Network network cm.getActiveNetwork();if (null network) {return false;}NetworkCapabilities capabilities cm.getNetworkCapabilities(network);if (null capabilities) {return false;}return capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);}/*** Android 10Q版本推荐** 获取成功上网的网络类型* value {* TRANSPORT_CELLULAR, 0 表示此网络使用蜂窝传输。* TRANSPORT_WIFI, 1 表示此网络使用Wi-Fi传输。* TRANSPORT_BLUETOOTH, 2 表示此网络使用蓝牙传输。* TRANSPORT_ETHERNET, 3 表示此网络使用以太网传输。* TRANSPORT_VPN, 4 表示此网络使用VPN传输。* TRANSPORT_WIFI_AWARE, 5 表示此网络使用Wi-Fi感知传输。* TRANSPORT_LOWPAN, 6 表示此网络使用LoWPAN传输。* TRANSPORT_TEST, 7 指示此网络使用仅限测试的虚拟接口作为传输。* TRANSPORT_USB, 8 表示此网络使用USB传输* }*/public static int getConnectedNetworkType(Context context) {ConnectivityManager cm (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);Network network cm.getActiveNetwork();if (null network) {return -1;}NetworkCapabilities capabilities cm.getNetworkCapabilities(network);if (null capabilities) {return -1;}if (capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)) {if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {return NetworkCapabilities.TRANSPORT_CELLULAR;} else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {return NetworkCapabilities.TRANSPORT_WIFI;} else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH)) {return NetworkCapabilities.TRANSPORT_BLUETOOTH;} else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) {return NetworkCapabilities.TRANSPORT_ETHERNET;} else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN)) {return NetworkCapabilities.TRANSPORT_VPN;} else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI_AWARE)) {return NetworkCapabilities.TRANSPORT_WIFI_AWARE;} else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_LOWPAN)) {return NetworkCapabilities.TRANSPORT_LOWPAN;} else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_USB)) {return NetworkCapabilities.TRANSPORT_USB;}}return -1;} } Android10之后请使用新的API方法 工具类可以根据业务需求去扩展 供参考。
http://www.hn-smt.com/news/63547/

相关文章:

  • 2025年11月GEO优化服务商推荐报告:从稳定性到AI能力的解决方案剖析
  • 2025-11-24
  • 2025年11月北京陪诊公司推荐榜:专业机构服务对比与选择指南
  • 2025年11月四川软电线/硬芯线/家装电线/铝合金电缆/铝芯电缆/铜芯/高压/中压/低压电线电缆供应厂家综合推荐指南:五大优质厂商深度解析
  • 周作业 45
  • 2025福建谷歌优化公司推荐/福建独立站建站公司推荐
  • 2025稳压器厂家哪家好?优质厂家实力测评
  • RAG相关概念梳理
  • 程序人生必读:如何通过读书会提升工艺深度与广度
  • 海外求职必备:多语言AI简历工具如何助力求职外企和跨国公司
  • 新露谷物语-新手指南:
  • 从 runC 到 runD:SAE 如何用 “装甲级” 隔离,化解运维安全焦虑!
  • 恢复Windows图片查看器
  • 生产制造用什么仓储软件(WMS)好?行业选型参考
  • 北京专注婚姻家事的律所推荐及业务领域解析
  • 苏州交通便利公墓推荐:环境与服务兼备之选
  • 2025年ai优化公司权威推荐榜单:ai搜索优化/ai优化效果/geo优化推广源头公司精选
  • work 6
  • 哪家做动物实验比较好?五家优质服务商权威推荐与分析
  • 基于MATLAB的语音识别实现方法
  • 2025年正规动物实验机构推荐:五大服务商助力生物医药创新与合规发展
  • 国内外蓝牙芯片原厂都有那些
  • 2025年上海长租公寓推荐:合规标杆魔方公寓,成新青年租房选择
  • 信誉卓著的医疗器械第三方公司:安全合规,专业可靠!
  • 哪家做医疗器械第三方比较好?值得信赖的服务商推荐清单!
  • 微店商品详情接口深度挖掘:从多接口联动到数据全息重构
  • 2025年回转式清污机生产厂家权威推荐榜单:钢丝绳牵引清污机/抓斗清污机/除污机源头厂家精选
  • AI元人文:全学科的三值纠缠——构建连接自然科学与人文社会的价值动力学框架
  • 2025年11月云南小程序开发服务商推荐榜,聚焦昆明app开发/小程序定制开发/定制开发小程序服务商服务口碑!
  • 物联网智慧平台