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;
}
7.根据步骤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的开发示例程序
这个程序运行后可以扫描周边的Wifi,并且做连接,还有历史记录
程序运行后的界面:
可以点击对应的按钮,显示周边的wifi信息,和连接的Wifi历史记录。点击某个Wifi条目,就是连接的操作,输入正确的密码就可以完成Wifi的连接
(一) 添加权限
(二) 布局代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:orientation=“vertical”>
<Button
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:onClick=“open”
android:text=“打开wifi” />
<Button
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:onClick=“close”
android:text=“关闭wifi” />
<Button
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:onClick=“scan”
android:text=“扫描wifi” />
<Button
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:onClick=“getGood”
android:text=“获取连接过的wifi配置信息” />
<ListView
android:id=“@+id/lv”
android:layout_width=“match_parent”
android:layout_height=“wrap_content” />
(三) WifiUtil工具类
/**
• wife使用的工具类
*/
public class WifiUtil {
// WifiManager.WIFI_STATE_ENABLED WiFi已打开
// WifiManager.WIFI_STATE_ENABLING WiFi打开中
// WifiManager.WIFI_STATE_DISABLING WiFi关闭中
// WifiManager.WIFI_STATE_DISABLED WiFi已关闭
// WifiManager.WIFI_STATE_UNKNOWN 未知的WiFi状态
// 定义一个WifiManager对象
private WifiManager mWifiManager;
// 定义一个WifiInfo对象
private WifiInfo mWifiInfo;
// 扫描出的网络连接列表
private List mWifiList;
// 网络连接列表
private List mWifiConfigurations;
WifiLock mWifiLock;
Context mContext;
//传入上下文
public WifiUtil(Context context) {
// 取得WifiManager对象
mContext = context;
mWifiManager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
// 取得WifiInfo对象
mWifiInfo = mWifiManager.getConnectionInfo();
}
// 打开wifi
public void openWifi() {
if (!mWifiManager.isWifiEnabled()) {
mWifiManager.setWifiEnabled(true);
}
}
//判断wife是否是连接状态
public boolean isConn() {
ConnectivityManager connManager = (ConnectivityManager) mContext
.getSystemService(mContext.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = connManager
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
return mWifi.isConnected();
}
// 关闭wifi
public void closeWifi() {
if (mWifiManager.isWifiEnabled()) {
mWifiManager.setWifiEnabled(false);
}
}
// 检查当前wifi状态
public int checkState() {
return mWifiManager.getWifiState();
}
// 锁定wifiLock
public void acquireWifiLock() {
mWifiLock.acquire();
}
// 解锁wifiLock
public void releaseWifiLock() {
// 判断是否锁定
if (mWifiLock.isHeld()) {
mWifiLock.acquire();
}
}
// 创建一个wifiLock
public void createWifiLock() {
mWifiLock = mWifiManager.createWifiLock(“test”);
}
// 得到配置好的网络
public List getConfiguration() {
return mWifiConfigurations;
}
// 指定配置好的网络进行连接
public boolean connetionConfiguration(int index) {
if (index > mWifiConfigurations.size()) {
return false;
}
// 连接配置好指定ID的网络
return mWifiManager.enableNetwork(mWifiConfigurations.get(index).networkId, true);
}
public void startScan() {
mWifiManager.startScan();
// 得到扫描结果
mWifiList = mWifiManager.getScanResults();
// 得到配置好的网络连接
mWifiConfigurations = mWifiManager.getConfiguredNetworks();
}
// 得到网络列表
public List getWifiList() {
return mWifiList;
}
// 查看扫描结果
public StringBuffer lookUpScan() {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < mWifiList.size(); i++) {
sb.append(“Index_” + new Integer(i + 1).toString() + “:”);
// 将ScanResult信息转换成一个字符串包
// 其中把包括:BSSID、SSID、capabilities、frequency、level
sb.append((mWifiList.get(i)).toString()).append(“\n”);
}
return sb;
}
public String getMacAddress() {
return (mWifiInfo == null) ? “NULL” : mWifiInfo.getMacAddress();
}
public String getBSSID() {
return (mWifiInfo == null) ? “NULL” : mWifiInfo.getBSSID();
}
public int getIpAddress() {
return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();
} // 得到连接的ID
public String getSSID() {
return (mWifiInfo == null) ? “” : mWifiInfo.getSSID().replace(“”", “”);
} // 得到连接的ID
public int getNetWordId() {
return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId();
} // 得到wifiInfo的所有信息
public String getWifiInfo() {
return (mWifiInfo == null) ? “NULL” : mWifiInfo.toString();
}
public String getGateway() {
intToIp(mWifiManager.getDhcpInfo().gateway);
}
private String intToIp(int paramInt) {
return (paramInt & 0xFF) + “.” + (0xFF & paramInt >> 8) + “.”
• (0xFF & paramInt >> 16) + “.” + (0xFF & paramInt >> 24);
}
// 添加一个网络并连接
public boolean addNetWork(WifiConfiguration configuration) {
int wcgId = mWifiManager.addNetwork(configuration);
return mWifiManager.enableNetwork(wcgId, true);
}
// 断开指定ID的网络
public void disConnectionWifi(int netId) {
mWifiManager.disableNetwork(netId);
mWifiManager.disconnect();
}
public WifiConfiguration createWifiInfo(String SSID, String Password,
int TYPE) {
WifiConfiguration config = new WifiConfiguration();
config.allowedAuthAlgorithms.clear();
config.allowedGroupCiphers.clear();
config.allowedKeyManagement.clear();
config.allowedPairwiseCiphers.clear();
config.allowedProtocols.clear();
config.SSID = “”" + SSID + “”";
WifiConfiguration tempConfig = this.IsExsits(SSID);
if (tempConfig != null) {
mWifiManager.removeNetwork(tempConfig.networkId);
}
if (TYPE == 1) // WIFICIPHER_NOPASS
{
// config.wepKeys[0] = “”;
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
// config.wepTxKeyIndex = 0;
}
if (TYPE == 2) // WIFICIPHER_WEP
{
config.hiddenSSID = true;
config.wepKeys[0] = “”" + Password + “”";
config.allowedAuthAlgorithms
.set(WifiConfiguration.AuthAlgorithm.SHARED);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
config.allowedGroupCiphers
.set(WifiConfiguration.GroupCipher.WEP104);
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
config.wepTxKeyIndex = 0;
}
if (TYPE == 3) // WIFICIPHER_WPA WPA2
{
config.preSharedKey = “”" + Password + “”";
config.hiddenSSID = true;
config.allowedAuthAlgorithms
.set(WifiConfiguration.AuthAlgorithm.OPEN);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
config.allowedPairwiseCiphers
.set(WifiConfiguration.PairwiseCipher.TKIP);
// config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
config.allowedPairwiseCiphers
.set(WifiConfiguration.PairwiseCipher.CCMP);
config.status = WifiConfiguration.Status.ENABLED;
}
return config;
}
//判断密码的类别
public int getType(String capabilities) //[wpa]
{
//[WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][WPS][ESS]
// [WPA2-PSK-CCMP][ESS]
//[ESS]
if (capabilities.contains(“WPA”))
return 3;
else if (capabilities.contains(“WEP”))
return 2;
else
return 1;
}
//根据SSID判断这个WIFE设置对象是否存在
private WifiConfiguration IsExsits(String SSID) {
List existingConfigs = mWifiManager
.getConfiguredNetworks();
for (WifiConfiguration existingConfig : existingConfigs) {
if (existingConfig.SSID.equals(“”" + SSID + “”")) {
return existingConfig;
}
}
return null;
}
}
(四) 主方法的类代码:
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener{
WifiUtil wifiUtil;//定义Wife工具类
ListView listView;//显示Wife的数据列表
ArrayAdapter adapter;//列表的适配器
List wifiSSIDs = new ArrayList<>();//列表的数据
WifiManager wifiManager;//Wife管理器
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
wifiUtil = new WifiUtil(this);
wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);//获取Wife管理器
listView = (ListView) findViewById(R.id.lv);
//创建适配器,并把适配器设置到ListView中
adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, wifiSSIDs);
listView.setAdapter(adapter);
//给ListView设置点击事件,点击后连接Wife
listView.setOnItemClickListener(this);
}
/**
• 打开Wife
*/
public void open(View view) {
wifiUtil.openWifi();
}
/**
• 关闭Wife
*/
public void close(View view) {
wifiUtil.closeWifi();
}
/**
• 扫描Wife
*/
List wifiList = new ArrayList<>();
public void scan(View view) {
isClickHistory = false;//显示的列表不是历史记录