WiFi
1.接收Wifi的反馈,并没有找到系统提供的接口,这里使用的是通过接收不同的广播来进行判断wifi的连接结果;
private WifiManager mWifiManager;
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
private WifiManager mWifiManager;
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
2.
- //开启WIFI
- public void WifiOpen(){
- if(!localWifiManager.isWifiEnabled()){
- localWifiManager.setWifiEnabled(true);
- }
- }
判断wifi状态
wifiManager.isWifiEnabled():开启
!wifiManager.isWifiEnabled():关闭
3.
- //扫描wifi
- public void WifiStartScan(){
- localWifiManager.startScan();
- }
4.得到WIFi的配置好的信息,包含配置好的密码
- //得到扫描WIFI结果
- public List<ScanResult> getScanResults(){
- return localWifiManager.getScanResults();//得到扫描结果
- }
5.根据WIFI的名称SSID判定指定WIFI是否已经配置好,配置好则返回其networkId,用于连接。之前尝试了BSSID地址没成功,所以只能使用SSID
- 得到Wifi配置好的信息
- public void getConfiguration(){
- wifiConfigList = localWifiManager.getConfiguredNetworks();//得到配置好的网络信息
- for(int i =0;i<wifiConfigList.size();i++){
- Log.i("getConfiguration",wifiConfigList.get(i).SSID);
- Log.i("getConfiguration",String.valueOf(wifiConfigList.get(i).networkId));
- }
- }
6.
- //判定指定WIFI是否已经配置好,依据WIFI的地址BSSID,返回NetId
- public int IsConfiguration(String SSID){
- Log.i("IsConfiguration",String.valueOf(wifiConfigList.size()));
- for(int i = 0; i < wifiConfigList.size(); i++){
- Log.i(wifiConfigList.get(i).SSID,String.valueOf( wifiConfigList.get(i).networkId));
- if(wifiConfigList.get(i).SSID.equals(SSID)){//地址相同
- return wifiConfigList.get(i).networkId;
- }
- }
- return -1;
- }
7.如果需要连接的WIFI没有配置好,即没有保存密码。则为指定名称ssid的WIFI添加密码信息psw,添加成功后返回给其分配的networId,同于连接
- //添加指定WIFI的配置信息,原列表不存在此SSID
- public int AddWifiConfig(List<ScanResult> wifiList,String ssid,String pwd){
- int wifiId = -1;
- for(int i = 0;i < wifiList.size(); i++){
- ScanResult wifi = wifiList.get(i);
- if(wifi.SSID.equals(ssid)){
- Log.i("AddWifiConfig","equals");
- WifiConfiguration wifiCong = new WifiConfiguration();
- wifiCong.SSID = "\""+wifi.SSID+"\"";//\"转义字符,代表"
- wifiCong.preSharedKey = "\""+pwd+"\"";//WPA-PSK密码
- wifiCong.hiddenSSID = false;
- wifiCong.status = WifiConfiguration.Status.ENABLED;
- wifiId = localWifiManager.addNetwork(wifiCong);//将配置好的特定WIFI密码信息添加,添加完成后默认是不激活状态,成功返回ID,否则为-1
- if(wifiId != -1){
- return wifiId;
- }
- }
- }
- return wifiId;
- }
8.根据步骤6配置好需要连接的WIFI密码信息后,下面通过networkId连接指定WIFI。在连接经过步骤6刚添加配置信息的WIFI信号之前需要重新执行下步骤4,得到新的配置好信息的列表。
- //连接指定Id的WIFI
- public boolean ConnectWifi(int wifiId){
- for(int i = 0; i < wifiConfigList.size(); i++){
- WifiConfiguration wifi = wifiConfigList.get(i);
- if(wifi.networkId == wifiId){
- while(!(localWifiManager.enableNetwork(wifiId, true))){//激活该Id,建立连接
- //status:0--已经连接,1--不可连接,2--可以连接
- Log.i("ConnectWifi",String.valueOf(wifiConfigList.get(wifiId).status));
- }
- return true;
- }
- }
- return false;
- }
判断wifi是否加密
String descOri = list.get(position).capabilities;
if (descOri.toUpperCase().contains("WPA-PSK")
|| descOri.toUpperCase().contains("WPA2-PSK")
|| descOri.toUpperCase().contains("WPA2")) {
//加密
}
} else {
//开放
}
return view;
}
权限:
- <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission><!-- 允许程序改变网络链接状态 -->
- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission><!--允许程序访问访问WIFI网络状态信息 -->
- <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission><!-- 允许程序改变WIFI链接状态 -->
- <uses-permission android:name="android.permission.INTERNET"></uses-permission>