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() {
-
return mWifiInfo == null ? “NULL”
- 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;
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的24套腾讯、字节跳动、阿里、百度2020-2021面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。
还有 高级架构技术进阶脑图、Android开发面试专题资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
点击:
《Android架构视频+BAT面试专题PDF+学习笔记》即可免费获取~
52525157)]
[外链图片转存中…(img-6kfNew85-1711352525158)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-qJa7lhmf-1711352525159)]
最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的24套腾讯、字节跳动、阿里、百度2020-2021面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。
还有 高级架构技术进阶脑图、Android开发面试专题资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
[外链图片转存中…(img-vpZiBCCK-1711352525159)]
[外链图片转存中…(img-kHPLf6l5-1711352525160)]
[外链图片转存中…(img-3adVddqq-1711352525161)]
点击:
《Android架构视频+BAT面试专题PDF+学习笔记》即可免费获取~
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。