在项目中经常会访问网络,比如我们在前面章回中介绍的Htpp请求以及最近章回中介绍的MQTT操作,在网络操作前需要判断网络的连接状态,不然可能因为网络问题导致程序运行失败。如果没有网络或者网络比较差时需要给用户提示,让用户明白是网络问题导致的程序失败。本章回中将介绍如何获取网络连接状态。
ConnectivityManager
getActiveNetworkInfo
()方法获取网络连接状态对象;isConnected
()方法获取网络的连接状态;网络连接状态使用NetworkInfo
类表示,它除了可以获取网络连接状态外还可以获取到网络的类型,比如移动网络还是WIFI网络。不过该类在在新版本中已经被弃用了官方文档显示:
This class was deprecated in API level 29.
官方建议使用ConnectivityManager.NetworkCallback API
,因为该API是异步的。我们在代码中使用时可以依据不同的SDK版本来选择不同的API。
private void getNetworkState() {ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);Network network = connectivityManager.getActiveNetwork();NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();if(network != null && networkInfo.isConnected()) {Log.d(TAG, "getNetworkState: network is connected");}else {Log.d(TAG, "getNetworkState: network is not connected");}}
在上面的代码中,我们把获取网络连接状态的功能封装成了一个函数,这样方便使用。代码中依据网络的连接状态打印了不同的日志,大家可以依据实际情况做不同的处理,比如网络连接时就去通过HTTP或者MQTT访问网络操作,网络没有连接时就提示用户当前网络没有连接,app连网功能无法使用。
注意使用上面的代码时一定在要配置文件中申请网络权限,详细如下:
看官们,关于"获取网络状态
"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!