4. getIpAddress() 获取IP 地址
5. getLinkSpeed() 获得连接的速度
6. getMacAddress() 获得Mac 地址
7. getRssi() 获得802.11n 网络的信号
8. getSSID() 获得SSID
9. getSupplicanState() 返回具体客户端状态的信息
(四) WifiManager
管理我们的wifi连接,这里已经定义好了一些类,可以供我们使用
(五) 获取WIFI网卡的状态
WIFI网卡的状态是由一系列的整形常量来表示的
- WIFI_STATE_DISABLED : WIFI网卡不可用(1)
- WIFI_STATE_DISABLING : WIFI网卡正在关闭(0)
- WIFI_STATE_ENABLED : WIFI网卡可用(3)
- WIFI_STATE_ENABLING : WIFI网正在打开(2) (WIFI启动需要一段时间)
- WIFI_STATE_UNKNOWN : 未知网卡状态
(六) Wifi权限,无非是网络和Wifi
(七) 常用方法
1.开启WIFI
public void WifiOpen(){
if(!localWifiManager.isWifiEnabled()){
localWifiManager.setWifiEnabled(true);
}
}
2.扫描WIFI信号
public void WifiStartScan(){
localWifiManager.startScan();
}
3.得到扫描WIFI结果
public List getScanResults(){
return localWifiManager.getScanResults();//得到扫描结果
}
4.得到WIFI的配置好的信息,包含配置好的密码
//得到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));
}
}
5.根据WIFI的名称SSID判定指定WIFI是否已经配置好,配置好则返回其networkId,用于连接。之前尝试了BSSID地址没成功,所以只能使用SSID
//判定指定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;
}
6.如果需要连接的WIFI没有配置好,即没有保存密码。则为指定名称ssi的WIFI添加密码信息psw,添加成功后返回给其分配的networId,同于连接
//添加指定WIFI的配置信息,原列表不存在此SSID
public int AddWifiConfig(List wifiList,String ssid,Stringpwd){
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;
}
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;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后
今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。
最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司20年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
【Android核心高级技术PDF文档,BAT大厂面试真题解析】
【算法合集】
【延伸Android必备知识点】
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后
今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。
最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司20年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
【Android核心高级技术PDF文档,BAT大厂面试真题解析】
[外链图片转存中…(img-P5ZhX5EF-1712423050688)]
【算法合集】
[外链图片转存中…(img-Xd0cZOQ3-1712423050688)]
【延伸Android必备知识点】
[外链图片转存中…(img-WNldr7S5-1712423050688)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!