工作随笔---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
- 工作随笔---WiFi开发(1)---WIFIBroadcastReceiver类
- 工作随笔---WiFi开发(2)---WIFIUtil类
- 工作随笔---WiFi开发(3)---WIFIScanList类
- 工作随笔---WiFi开发(4)---WIFISavedList类
- 工作随笔---WiFi开发(5)---WIFIWpsConnect类
- wifi 随笔1
- 工作随笔(1)
- 工作随笔2016.2.1
- 工作随笔1
- 工作随笔1
- IT软件开发 工作一年随笔
- 工作1年之随笔
- 工作随笔
- 工作随笔
- 工作随笔
- 工作随笔
- 工作随笔
- 工作随笔
- 文件批量修改
- android中常见的设计模式有哪些?
- Oracle行转列
- BZOJ 2229 [Zjoi2011] 最小割
- asp.net core mvc剖析:KestrelServer
- 工作随笔---WiFi开发(1)---WIFIBroadcastReceiver类
- 自动换行StaticLayout的简单介绍
- iOS开发上传App Store时候一直卡在 Authenticating with the iTunes Store 的解决办法
- EventBus的导入
- iOS 线程同步与锁
- Jquery mobile动态加载渲染失效
- 『 论文阅读』Understanding deep learning requires rethinking generalization
- python使用matplotlib绘制k线图
- EFcore与动态模型