您的位置:首页 > 理论基础 > 计算机网络

网络监听器

2016-01-23 13:14 851 查看
1。注意原生的方法获得的网络的ssid,是自带““的,使用的时候需要将两边的ssid去掉

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);
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: