各位看官们大家好,上一回中咱们说的例子是"在Android中使用MQTT通信七",本章回介绍的例子是" 获取网络状态"。闲话休提,言归正转,让我们一起Talk Android吧!
概念介绍
在项目中经常会访问网络,比如我们在前面章回中介绍的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连网功能无法使用。
注意使用上面的代码时一定在要配置文件中申请网络权限,详细如下:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
看官们,关于"获取网络状态
"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!