工作随笔---WiFi开发(1)---WIFIBroadcastReceiver类

来源:互联网 发布:淘宝怎样退货流程 编辑:程序博客网 时间:2024/06/03 08:55

1.背景需求

根据客户需求,在Android系统的WIFI模块的基础上,对WIFI机能进行自定义开发。主要还是调用Android中WIFI相关的API,具体的实现过程后续会详细讲解。

2.开发流程

(1)注册WIFIBroadcastReceiver.
WIFI的开关状态,连接状态等都是通过系统的广播通知的,我们需要WIFIBroadcastReceiver来接收WIFI的各种状态通知。

    注册之前,先需要添加相关的权限,否则无法收到系统广播    //允许程序读写系统安全敏感的设置项    <permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>               //允许程序改变网络连接状态    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />          //改变WLAN状态的开关    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />             //获取网络信息状态    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />          //获取使用Wi-Fi等WLAN无线网络    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />      对于BroadcastReceiver的注册方式,可以有两种:    ①动态注册(代码中实现)        m_broadCastReceiver = SysMangerWIFIBroadcastReceiver.getInstance();        m_intentFilter = new IntentFilter();        m_intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);        m_intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);        m_intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);        m_intentFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);        m_intentFilter.addAction(WifiClient.ACTION_WPS_PROGRESS_CHANGED);        m_intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);        context.registerReceiver(m_broadCastReceiver, m_intentFilter);    ②Manifest文件中注册        <receiver android:name=".SysMangerWIFIBroadcastReceiver" >            <intent-filter>                <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />                <action android:name="android.net.wifi.STATE_CHANGE" />                ......            </intent-filter>        </receiver>

(2)新建SysMangerWIFIBroadcastReceiver.java类继承BroadcastReceiver.
代码中接收WIFI通知,处理相关的事件。

    private static final String TAG = "WIFIBroadcastReceiver";    public void onReceive(Context arg0, Intent arg1) {        //get the status of wifi        if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(arg1.getAction())) {            int wifiState = arg1.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);            switch (wifiState) {            case WifiManager.WIFI_STATE_DISABLED:                //SysLog.out(TAG, "onReceive", "wifi disabled");                for (WiFIStatusListener m_wifiStatusListener : m_wifiStatusListeners) {                    if (null != m_wifiStatusListener) {                        m_wifiStatusListener.macChange();                        m_wifiStatusListener.buttonStatusChange();                    }                }                break;            case WifiManager.WIFI_STATE_DISABLING:                //SysLog.out(TAG, "onReceive", "wifi disabling");                for (WiFIStatusListener m_wifiStatusListener : m_wifiStatusListeners) {                    if (null != m_wifiStatusListener) {                        m_wifiStatusListener.buttonStatusChange();                    }                }                break;            case WifiManager.WIFI_STATE_ENABLED:                //SysLog.out(TAG, "onReceive", "wifi enabled");                for (WiFIStatusListener m_wifiStatusListener : m_wifiStatusListeners) {                    if (null != m_wifiStatusListener) {                        m_wifiStatusListener.macChange();                        m_wifiStatusListener.buttonStatusChange();                    }                }                break;            case WifiManager.WIFI_WIFI_STATE_ENABLING:                //SysLog.out(TAG, "onReceive", "wifi enabling");                for (WiFIStatusListener m_wifiStatusListener : m_wifiStatusListeners) {                    if (null != m_wifiStatusListener) {                        m_wifiStatusListener.buttonStatusChange();                    }                }                break;            default:                break;        }        //get the notification of pwd error        if(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION.equals(arg1.getAction())){            int State = arg1.getIntExtra(WifiManager.EXTRA_SUPPLICANT_ERROR, 0);            if(State==WifiManager.ERROR_AUTHENTICATING){                //SysLog.out(TAG,"onReceive" , "wificonnect failure(pwd error)");            }        }        //get the notification of wpsconnect        if (WifiClient.ACTION_WPS_PROGRESS_CHANGED.equals(arg1.getAction())) {            int status = arg1.getIntExtra(                    WifiClient.EXTRA_WPS_PROGRESS_STATE, -1);            switch (status) {            case WifiClient.WPS_PROGRESS_START_COMPLETION:                //SysLog.out(TAG, "onReceive", "Wps Completion");                break;            case WifiClient.WPS_PROGRESS_START_FAILURE:                //SysLog.out(TAG, "onReceive", "Wps Start Failure");                break;            case WifiClient.WPS_PROGRESS_START_SUCCESS:                //SysLog.out(TAG, "onReceive", "Wps Start Success");                break;            case WifiClient.WPS_PROGRESS_CANCEL_FAILURE:                //SysLog.out(TAG, "onReceive", "Wps Cancel Failure");                break;        }        //get the notification of  AP connected        if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(arg1.getAction())) {              Parcelable parcelableExtra = arg1.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);                      if (null != parcelableExtra) {                          NetworkInfo wifi = (NetworkInfo) parcelableExtra;                          if (wifi != null) {                            if (NetworkInfo.State.CONNECTED == wifi.getState()) {                                //SysLog.out(TAG, "onReceive", "wifi connected");                            }else if(NetworkInfo.State.DISCONNECTING == wifi.getState()){                                //SysLog.out(TAG, "onReceive", "wifi disconnecting");                               }else if (NetworkInfo.State.DISCONNECTED == wifi.getState()) {                                //SysLog.out(TAG, "onReceive", "wifi disconnected");                            }else if (NetworkInfo.State.CONNECTING == wifi.getState()) {                            //SysLog.out(TAG, "onReceive", "wifi connecting");                            }                        }                    }        }
    private ArrayList<WiFIStatusListener> m_wifiStatusListeners = new ArrayList<SysMangerWIFIBroadcastReceiver.WiFIStatusListener>();    //定义接口,通知其他画面wifi状态变化    public interface WiFIStatusListener {        public void ipChange();        public void macChange();        public void buttonStatusChange();        public void isConnected(int satus);    }    //其他画面调用注册listener    public void addWiFIStatusListener(WiFIStatusListener listener) {        if (null != m_wifiStatusListeners && null != listener                && !m_wifiStatusListeners.contains(listener)) {            this.m_wifiStatusListeners.add(listener);        }    }    //其他画面调用remove listener    public void removeWiFIStatusListener(WiFIStatusListener listener) {        this.m_wifiStatusListeners.remove(listener);    }
0 0
原创粉丝点击