判断并监测网络连接状态

来源:互联网 发布:linux 设置ip 编辑:程序博客网 时间:2024/05/23 21:02

判断当前是否有网络连接

ConnectivityManager cm =        (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo activeNetwork = cm.getActiveNetworkInfo();boolean isConnected = activeNetwork != null &&                      activeNetwork.isConnectedOrConnecting();

判断连接网络的类型

boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;

监听网络连接的变化

  • 当网络连接发生改变时,ConnectivityManager会广播CONNECTIVITY_ACTION(android.net.conn.CONNECTIVITY_CHANGE)的Action消息。 我们可以在Manifest文件里面注册一个BroadcastReceiver,来监听这些变化,并适当地恢复(或挂起)你的后台更新:
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
  • 设备的网络变化可能会比较频繁,因此每当你在移动网络与Wi-Fi之间切换的时候,这一广播就会被触发。因此,我们可以仅在之前的更新或者下载任务被挂起的时候去监听这一广播(用来恢复那些任务)。通常我们可以在开始更新前检查一下网络连接,如果当前没有连接到互联网,那么就将更新任务挂起,直到连接恢复。

切换是否开启接收器以提高效率

  • 我们可以使用PackageManager来切换任何一个在Mainfest里面定义好的组件的开启状态。通过下面的方法可以开启或者关闭任何一个BroadcastReceiver:
ComponentName receiver = new ComponentName(context, myReceiver.class);PackageManager pm = context.getPackageManager();pm.setComponentEnabledSetting(receiver,        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,        PackageManager.DONT_KILL_APP)
  • 使用这种技术,如果我们确定网络连接已经断开,那么可以在这个时候关闭除了监听网络状态变化的接收器之外的其它所有接收器。
  • 相反的,一旦重新建立网络连接,我们可以停止监听网络连接的改变,而仅仅在执行需要联网的操作之前判断当前网络是否可以用。
  • 同样地,你可以使用上面的技术来暂缓一个需要更高带宽的下载任务。这仅需要启用一个监听网络连接变化的BroadcastReceiver,并在连接到Wi-Fi时,初始化下载任务。
原创粉丝点击