网络监听器
2016-01-23 13:14
851 查看
1。注意原生的方法获得的网络的ssid,是自带““的,使用的时候需要将两边的ssid去掉
2。 网络监听器不能注册过多,最好单独注册一个,而不要每次都去new 一个对象,否则可能出错
3。 另外需要在manifest文件中注册
2。 网络监听器不能注册过多,最好单独注册一个,而不要每次都去new 一个对象,否则可能出错
3。 另外需要在manifest文件中注册
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
public class BFNetworkMonitor { private static final String NET_2G = "2G"; private static final String NET_3G = "3G"; private static final String NET_WIFI = "WIFI"; private static String netSsid; private static IntentFilter intentFilter; public static NetworkChangeReceiver networkChangeReceiver; public static void registerNetworkReceiver(Application application) { intentFilter = new IntentFilter(); intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); networkChangeReceiver = new NetworkChangeReceiver(); application.registerReceiver(networkChangeReceiver, intentFilter); } public static void unRegisterNetworkReceiver(Application application) { application.unregisterReceiver(networkChangeReceiver); networkChangeReceiver = null; } public static String getNetSsid() { String result = "unknown"; if(BFLifeMonitor.currentActivity != null) { if (getNetworkTypeName().equals(NET_WIFI)) { WifiManager wifiManager = (WifiManager) BFLifeMonitor.currentActivity.getSystemService(BFLifeMonitor.currentActivity.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); String ssid = wifiInfo.getSSID(); result = ssid.substring(1,ssid.length()-1); // Log.d("tingxiang ssid",result); } } return result; } private static String getNetworkTypeName() { ConnectivityManager cm = (ConnectivityManager) Bifrost.globalApplication.getSystemService(Context.CONNECTIVITY_SERVICE); String networkType = NET_WIFI; NetworkInfo[] info = null; try { info = cm.getAllNetworkInfo(); } catch (Exception ex) { ex.printStackTrace(); return NET_3G; } if (info != null) { for (int i = 0; i < info.length; i++) { if (info[i] != null) { NetworkInfo.State tem = info[i].getState(); if ((tem == NetworkInfo.State.CONNECTED || tem == NetworkInfo.State.CONNECTING)) { networkType = info[i].getTypeName(); break; } } } } if (networkType.equalsIgnoreCase(NET_WIFI)) { return NET_WIFI; } else if (networkType.equalsIgnoreCase("MOBILE")) { TelephonyManager tm = (TelephonyManager) Bifrost.globalApplication.getSystemService(Context.TELEPHONY_SERVICE); switch (tm.getNetworkType()) { case TelephonyManager.NETWORK_TYPE_GPRS: case TelephonyManager.NETWORK_TYPE_EDGE: case TelephonyManager.NETWORK_TYPE_CDMA: return NET_2G; default: return NET_3G; } } return networkType; } private static class NetworkChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isAvailable()) { String currentSsid = getNetSsid(); if(currentSsid.equals(netSsid) == false) { BFRuleMgr.getInstance().updateCurrentRules(BFConstant.CONDITION_NET); //网络有变化时触发rule的重新判断 netSsid = currentSsid; // Log.d("tingxiang 11", "net " + netSsid); } } else { BFRuleMgr.getInstance().updateCurrentRules(BFConstant.CONDITION_NET); //网络有变化时触发rule的重新判断 netSsid = "no net available"; // Log.d("tingxiang 22", "net "+ netSsid); } } } }
相关文章推荐
- Android 一个改善的okHttp封装库
- tcp/ip协议的3次握手
- Ubuntu重启网络:Solution for resolvconf: Error: etc resolv.conf isn't a symlink, not doing anything
- Win10在桌面上怎么添加此电脑、网络图标、回收站等图标?
- iOS 开发的常见问题不涉及网络
- javaweb之----http协议详解
- Android学习历程12-Android 网络请求
- 几种TCP连接中出现RST的情况 2013-1
- 历史上的今天——网络爬虫
- Python 实现的下载op海贼王网的图片(网络爬虫)
- 压力测试攻击 http_load
- HttpServletRequest介绍
- GIF图片合集(用于网络请求图片用)
- caffe 学习记录1及网络结构
- Unit testing code that uses HttpContext.Current.Session
- 网络基础——知识生活化会变得如此简单
- 计算机网络-TCP/IP参考模型Reference Model)
- 转:Android 判断用户2G/3G/4G移动数据网络
- AngularJS中如何使用$http对MongoLab数据表进行增删改查
- 二次元的概念那么火,但网络动画变现之路却漫漫