Android监听网络状态变化,随着网络的变化做一些其他处理
来源:互联网 发布:广联达bim建模软件 编辑:程序博客网 时间:2024/06/06 05:27
用广播实现,我已经把这个作为一个同用的类了,只需要在需要监听网络变化的类里设置下监听回调即可。
以下是代码:
import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.util.Log;import java.util.ArrayList;import java.util.List;/** * Created by Smile on 2016/9/26. */public class NetworkChange extends BroadcastReceiver { public final int wifi = 2, mobile = 1, none = 0; public int oldState = none; public List<OnNetWorkChange> onNetWorkChange = new ArrayList<>(); private static NetworkChange networkChange; public static NetworkChange getInstance() { if (networkChange == null) { networkChange = new NetworkChange(); } return networkChange; } //回调接口 public interface OnNetWorkChange { //返回各个(wifi,移动网络,没有网络)状态的值,上一个网络状态的值,当前的网络状态的值 void onChange(int wifi, int mobile, int none, int oldStatus, int newStatus); } /** * 增加网络变化监听回调对象 * 如果设置多个回调,请务必不要设置相同名字的OnNetWorkChange对象,否则会无效 * * @param onNetWorkChange 回调对象 */ public void setOnNetWorkChange(OnNetWorkChange onNetWorkChange) { if (this.onNetWorkChange.contains(onNetWorkChange)) { return; } this.onNetWorkChange.add(onNetWorkChange); Log.i("网络状态", "添加一个回调。已设置:" + this.onNetWorkChange.size()); } /** * 取消网络变化监听监听回调 * * @param onNetWorkChange 回调对象 */ public void delOnNetWorkChange(OnNetWorkChange onNetWorkChange) { if (this.onNetWorkChange.contains(onNetWorkChange)) { this.onNetWorkChange.remove(onNetWorkChange); Log.i("网络状态", "删除一个回调。还有:" + this.onNetWorkChange.size()); } } /** * 触发网络状态监听回调 * * @param nowStatus 当前网络状态 */ private void setChange(int nowStatus) { for (OnNetWorkChange change : onNetWorkChange) { change.onChange(wifi, mobile, none, oldState, nowStatus); } oldState = nowStatus; } @Override public void onReceive(Context context, Intent intent) { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); NetworkInfo wifiNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (onNetWorkChange == null) { //当没有设置回调的时候,什么都不做 return; } if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) { Log.i("通知", "网络不可以用"); setChange(none); } else if (mobNetInfo.isConnected()) { Log.i("通知", "仅移动网络可用"); setChange(mobile); } else if (wifiNetInfo.isConnected()) { Log.i("通知", "Wifi网络可用"); setChange(wifi); } }}
这个广播类首先要注册下,推荐在Application类里注册:
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);registerReceiver(NetworkChange.getInstance(), filter);
home_onChange对象名务必不能出现一样的,不然会导致无效。
private NetworkChange.OnNetWorkChange home_onChange = new NetworkChange.OnNetWorkChange() { @Override public void onChange(int wifi, int mobile, int none, int oldStatus, int newStatus) { if (newStatus == none){ //没有网络 } if (newStatus == mobile){ //移动网络 } if (newStatus == wifi){ //wifi网络 if (oldStatus == mobile) { //从移动网络切换到wifi网络 } } } }; //注册监听网络变化 private void registerReceiver() { NetworkChange.getInstance().setOnNetWorkChange(home_onChange); } //取消监听网络变化 private void unregisterReceiver() { NetworkChange.getInstance().delOnNetWorkChange(home_onChange); }
NetworkChange.getInstance().setOnNetWorkChange(home_onChange);
在onDestroy里去掉回调
NetworkChange.getInstance().delOnNetWorkChange(home_onChange);
0 0
- Android监听网络状态变化,随着网络的变化做一些其他处理
- Android监听网络状态变化
- android 监听网络连接状态的变化
- Android 监听网络状态的变化
- android 监听网络状态的变化+Observer
- 监听网络状态变化
- Android:检测网络状态&监听网络变化
- Android:检测网络状态&监听网络变化
- Android监听网络的变化
- Android监听网络的变化
- Android监听网络的变化
- Android 监听网络的变化
- Android 监听网络的变化
- Android监听网络连接状态变化
- android接收广播监听网络状态变化
- 简单 android 广播监听网络状态变化
- 笔记 android 监听网络状态变化-------广播
- android 使用广播监听网络状态变化
- 微信开放平台apk的应用签名的获取
- windows7开启Windows Media Player Network Sharing Service 失败的解决办法
- Java实现排序算法——归并排序
- 安装openfire服务器端 微信聊天客户端
- laravel数据库迁移详解
- Android监听网络状态变化,随着网络的变化做一些其他处理
- ubuntu14.04下安装搜狗拼音输入法
- CASS启动太慢,启动加速设置
- Android ListView滑动过程中图片异步加载优化(配合Volley使用)
- php设计模式之工厂模式(工厂模式实现计算器功能)
- git add 和 git reset
- 键盘的弹出和隐藏
- jdk和eclipse的下载安装
- Differences between OpenCV JavaCV and OpenCV4Android