查询网络连接状态
来源:互联网 发布:mp4加速播放软件 编辑:程序博客网 时间:2024/04/29 02:57
应用程序有时需要检查网络连接状态,有三种方法:
1:通过ConnectivityManager来监控设备的网络连接状态和网络连接类型;
2:通过注册广播BreadcastReceiver来检测网络连接的变化;
3:通过PhoneStateListener来监控设备的网络的连接状态和网络连接类型;
ConnectivityManager
1:需要加权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
2:获取ConnectivityManager服务:
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
3:得到NetworkInfo:
NetworkInfo networkInfo = cm.getActiveNetworkInfo();String typeName = info.getTypeName(); //5中网络连接类型:cmwap/cmnet/wifi/uniwap/uninet info.getType(); // 以何种方式连线 [WIFI]info.getState(); // 连线状态 [CONNECTED]info.isAvailable(); // 网络是否可用 [true]info.isConnected(); // 网络是否已经连接 [true]info.isConnectedOrConnecting(); // 网络是否已经连接或者连接中 [true]info.isFailover(); // 网络是否有问题 [false]info.isRoaming(); // 网络是否在漫游中 [false]
3:实例:
(1)检查网络的连接状态
public boolean isNetworkReachable() { ConnectivityManager mManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo current = mManager.getActiveNetworkInfo(); if(current == null) { return false; } return (current.getState() == NetworkInfo.State.CONNECTED);}
注意:如果没有可用的网络连接,NetworkInfo.getActiveNetworkInfo()会返回null;如果有可用的网络,就可以检查其状态,可 能的返回值如下:
● DISCONNECTED
● CONNECTING
● CONNECTED
● DISCONNECTING
如果返回的状态是CONNECTED,说明网络是稳定的可以用来访问远程资源。
(2)判断网络连接类型
public boolean isWifiReachable() { ConnectivityManager mManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo current = mManager.getActiveNetworkInfo(); if(current == null) { return false; } return (current.getType() == ConnectivityManager.TYPE_WIFI);}
(3)在网络访问失败时检查网络连通性:
try { //尝试访问网络资源时,如果失败可能会抛出HttpResponseException 或 //其他IOException 异常 } catch (Exception e) { if( !isNetworkReachable() ) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("No Network Connection"); builder.setMessage("The Network is unavailable."+ " Please try your request again later."); builder.setPositiveButton("OK",null); builder.create().show(); } }
由于网络连接的状态发生改变时,会发送广播,所以我们可以通过注册BroadcastReceiver来检测网络连接
1:注册广播
IntentFilter filter = new IntentFilter(); filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); registerReceiver(receiver, filter);
2:定义广播接受者
private BroadcastReceiver receiver = new BroadcastReceiver(){ @SuppressWarnings("deprecation") @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); NetworkInfo aNetworkInfo = (NetworkInfo) bundle. get(ConnectivityManager.EXTRA_NETWORK_INFO); } };
PhoneStateListener
我们通常使用PhoneStateListener来监听手机的来电,它还可以监听网络连接的类型和状态;
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);tm.listen(new PhoneStateListener(){ @Override public void onDataConnectionStateChanged(int state, int networkType) { 。。。 } }, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);
onDataConnectionStateChanged()源码:
/** * Callback invoked when connection state changes. * * @see TelephonyManager#DATA_DISCONNECTED * @see TelephonyManager#DATA_CONNECTING * @see TelephonyManager#DATA_CONNECTED * @see TelephonyManager#DATA_SUSPENDED */ public void onDataConnectionStateChanged(int state) { // default implementation empty } /** * same as above, but with the network type. Both called. */ public void onDataConnectionStateChanged(int state, int networkType) { }
0 0
- 查询网络连接状态
- 连接状态查询
- tcp连接状态查询
- 查询网络状态
- 网络状态查询
- 查询网络状态
- 网络连接状态详解
- 判断网络连接状态
- 判断网络连接状态
- Android 网络连接状态
- 判断网络连接状态
- 检测网络连接状态
- 检测网络连接状态
- 判断网络连接状态
- 判断网络连接状态
- 判断网络连接状态
- 网络连接状态判断
- 判断网络连接状态
- 有向图中Dijstra最短路径算法的邻接表实现
- 八大排序的python实现
- ios中多线程介绍
- [Lintcode]Sqrt(x)
- RabbitMQ学习1. 在windows下安装配置
- 查询网络连接状态
- C#Winform限制TextBox文本框只能输入文本的格式
- 指向函数的指针
- Dubbo安装部署
- poj2485 最小生成树 kruskal算法
- java泛型——基本使用
- Tyvj_P1010
- Leetcode no. 39
- spring security学习,使用过程