网络监听器

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);
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值