项目WIFI功能总结
作者:互联网
WIFI功能总结
项目 WiFi使用的功能:
1.打开wifi
2.状态监听
3.扫描wifi
4.连接wifi
5.关闭wifi
需要先配置相应的权限,如果是Android N以上级的动态申请位置权限
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <!-- 在android 7 以上 需要添加位置权限 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> |
WIFI开发所关心的三个类和功能描述:
类名 |
功能 |
WifiManager |
wifi统一管理类,进行各种wifi操作 |
WifiInfo |
描述当前连接的wifi热点信息 |
WifiConfiguration |
wifi网络配置信息 |
ScanResult |
描述扫描出的wifi热点的信息 |
四个专业术语:
名称 |
功能 |
SSID |
描述wifi热点的名称,就是大家搜索到的直接名称,如TP-LINK_88E6 |
BSSID |
站点的 mac地址 |
networkID |
网络号ID |
RSSI |
描述wifi信号强弱的值,官方叫做level |
注:已经存储了wifi的信息,而这一个个wifi信息可以看作是一个以networkid为标识存储在设备上的队列
获得WifiManager的实例对象:
WifiManager mWifiManager= (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); |
设置wifi开关:
boolean isOpen=mWifiManager.setWifiEnabled(true) |
监听设备wifi状态的改变:
采用广播事件来进行监听状态变化,然后处理相应UI和逻辑
名称 |
功能 |
WifiManager.WIFI_STATE_CHANGED_ACTION |
wifi开关变化通知 |
WifiManager.SCAN_RESULTS_AVAILABLE_ACTION |
wifi扫描结果通知 |
WifiManager.SUPPLICANT_STATE_CHANGED_ACTION |
wifi连接结果通知 |
WifiManager.NETWORK_STATE_CHANGED_ACTION |
网络状态变化通知 |
获取扫描wifi结果
mWifiManager.startScan();//发起扫描 List<ScanResult> Results = mWifiManager.getScanResults();//获取扫描结果(注意:第一次是null) |
获取当前wifi的连接信息:
WifiInfo info = mWifiManager.getConnectionInfo(); |
注:如果当前没有连接wifi的话,就会返回Null,它包括了SSID、networkId、BSSID等,切记一个问题:它的SSID是带双引号的,这点和ScanResult对象不一样。
连接:
创建wifiConfigruation对象:ScanResult.capabilities
public WifiConfiguration CreateWifiInfo(String SSID, String Password, int Type) config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED); |
添加网络并连接:
int wcgID = mWifiManager.addNetwork(config) mWifiManager.enableNetwork(wcgID, true); |
断开连接:
mWifiManager.disconnect(); |
总结:
1、错误:“java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread.”
原因:异步线程或多处都在更新list数据,造成ListView和Adapter数据不同步。
解决方法:new 一个新的adapterList 去存源list,将adapterList 赋值给adapter数据源
if (adapterList != null) { |
2、WiFi不需要在后台一直不间断循环扫描,浪费资源并容易引起错误,保持和原生WifiSettings一样,隔十秒扫一次,onPause就停止扫描。
3、初次扫描wifi 获取到的值是null,需要在初次扫描完成之后判断返回的数据长度,决定是否需要立即再扫描一次。
4、因为车机的WiFi没有删除或取消保存的操作,可能出现热点修改了密码后WiFi连不上的情况。所以修改为在WiFi连接错误的时候,重置一次密码,可避免该情况。
标签:总结,功能,wifi,WifiConfiguration,WIFI,mWifiManager,set,WifiManager,config 来源: https://blog.csdn.net/sinat_29924199/article/details/91390320