Android本身自带了一些对WiFi操作的包,在android.net.wifi包里面。简单介绍一下:
大致可以分为四个主要的类ScanResult,wifiConfiguration,WifiInfo,WifiManager:
1、ScanResult:主要是通过wifi 硬件的扫描来获取一些周边的wifi 热点的信息。
2、wifiConfiguration: 在我们连通一个wifi 接入点的时候,需要获取到的一些信息。大家可以跟我们有线的设备进行对比一下。
3、WifiInfo: 在我们的wifi 已经连通了以后,可以通过这个类获得一些已经连通的wifi 连接的信息获取当前链接的信息,这里信息就比较简单了,这里简单介绍一下这里的方法:
getBSSID() //获取BSSID
getDetailedStateOf() //获取客户端的连通性
getHiddenSSID() //获得SSID 是否被隐藏
getIpAddress() //获取IP 地址
getLinkSpeed() //获得连接的速度
getMacAddress() //获得Mac 地址
getRssi() //获得802.11n 网络的信号
4、wifiManager :这个不用说,就是用来管理我们的wifi 连接,这里已经定义好了一些类,可以供我们使用。这里来说相对复杂,里面的内容比较多,但是通过字面意思,我们还是可以获得很多相关的信息。这个类里面预先定义了许多常量,我们可以直接使用,不用再次创建。
Wifi状态有以下几种:(括号内为所对应的的int值)
1. wifiManager.WIFI_STATE_DISABLED (1) //WIFI网卡不可用
2. wifiManager.WIFI_STATE_ENABLED (3) //WIFI网卡可用
3. wifiManager.WIFI_STATE_DISABLING (0) //WIFI网卡正在关闭
4 .wifiManager.WIFI_STATE_ENABLING (2) //WIFI网卡正在打开
5. wifiManager.WIFI_STATE_UNKNOWN (4) //WIFI网卡状态不可知
要操作WiFi设备,就要使用Context.getSystemService(Context.WIFI_SERVICE)来获取WifiManager对象,并通过这个对象来管理WiFi设备。
compareSignalLevel(int rssiA, int rssiB)//对比网络A和网络B的信号强度
createWifiLock(int lockType, String tag)//创建一个WIFI 锁,锁定当前的WIFI连接
disableNetwork(int netId)//让一个网络连接失效
disconnect()//断开当前的WIFI连接
enableNetwork(int netId, Boolean disableOthers)//连接netId所指的WIFI网络,并是其他的网络都被禁用
getConfiguredNetworks()//获取网络连接的状态
getConnectionInfo()//获取当前连接的信息
getWifiState()//获取当前WIFI设备的状态
isWifiEnabled()//判断WIFI设备是否打开
pingSupplicant()//ping操作,和PC的ping操作相同作用
ressociate()//重新连接WIFI网络,即使该网络是已经被连接上的
reconnect()//重新连接一个未连接上的WIFI网络
removeNetwork()//移除某一个网络
saveConfiguration()//保留一个配置信息
setWifiEnabled()//让一个连接有效
startScan()//开始扫描
大致可以分为四个主要的类ScanResult,wifiConfiguration,WifiInfo,WifiManager:
1、ScanResult:主要是通过wifi 硬件的扫描来获取一些周边的wifi 热点的信息。
2、wifiConfiguration: 在我们连通一个wifi 接入点的时候,需要获取到的一些信息。大家可以跟我们有线的设备进行对比一下。
3、WifiInfo: 在我们的wifi 已经连通了以后,可以通过这个类获得一些已经连通的wifi 连接的信息获取当前链接的信息,这里信息就比较简单了,这里简单介绍一下这里的方法:
getBSSID() //获取BSSID
getDetailedStateOf() //获取客户端的连通性
getHiddenSSID() //获得SSID 是否被隐藏
getIpAddress() //获取IP 地址
getLinkSpeed() //获得连接的速度
getMacAddress() //获得Mac 地址
getRssi() //获得802.11n 网络的信号
getSSID() //获得SSID
getSupplicanState() //返回具体客户端状态的信息4、wifiManager :这个不用说,就是用来管理我们的wifi 连接,这里已经定义好了一些类,可以供我们使用。这里来说相对复杂,里面的内容比较多,但是通过字面意思,我们还是可以获得很多相关的信息。这个类里面预先定义了许多常量,我们可以直接使用,不用再次创建。
Wifi状态有以下几种:(括号内为所对应的的int值)
1. wifiManager.WIFI_STATE_DISABLED (1) //WIFI网卡不可用
2. wifiManager.WIFI_STATE_ENABLED (3) //WIFI网卡可用
3. wifiManager.WIFI_STATE_DISABLING (0) //WIFI网卡正在关闭
4 .wifiManager.WIFI_STATE_ENABLING (2) //WIFI网卡正在打开
5. wifiManager.WIFI_STATE_UNKNOWN (4) //WIFI网卡状态不可知
要操作WiFi设备,就要使用Context.getSystemService(Context.WIFI_SERVICE)来获取WifiManager对象,并通过这个对象来管理WiFi设备。
addNetwork(WifiConfiguration config)//添加一个config描述的WIFI网络,默认情况下,这个WIFI网络是DISABLE状态的。
calculateSignalLevel(int rssi , int numLevels)//计算信号的等级compareSignalLevel(int rssiA, int rssiB)//对比网络A和网络B的信号强度
createWifiLock(int lockType, String tag)//创建一个WIFI 锁,锁定当前的WIFI连接
disableNetwork(int netId)//让一个网络连接失效
disconnect()//断开当前的WIFI连接
enableNetwork(int netId, Boolean disableOthers)//连接netId所指的WIFI网络,并是其他的网络都被禁用
getConfiguredNetworks()//获取网络连接的状态
getConnectionInfo()//获取当前连接的信息
getDhcpInfo()//获取DHCP 的信息
getScanResulats()//获取扫描测试的结果getWifiState()//获取当前WIFI设备的状态
isWifiEnabled()//判断WIFI设备是否打开
pingSupplicant()//ping操作,和PC的ping操作相同作用
ressociate()//重新连接WIFI网络,即使该网络是已经被连接上的
reconnect()//重新连接一个未连接上的WIFI网络
removeNetwork()//移除某一个网络
saveConfiguration()//保留一个配置信息
setWifiEnabled()//让一个连接有效
startScan()//开始扫描
updateNetwork(WifiConfiguration config)//更新一个网络连接
其实网上的人已经把WiFiAdmin集成的非常好了,我就直接拿来用:
import java.util.List;
import android.content.Context;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiManager.WifiLock;
public class WifiAdmin {
// 定义WifiManager对象
private WifiManager mWifiManager;
// 定义WifiInfo对象
private WifiInfo mWifiInfo;
// 扫描出的网络连接列表
private List<ScanResult> mWifiList;
// 网络连接列表
private List<WifiConfiguration> mWifiConfiguration;
// 定义一个WifiLock
WifiLock mWifiLock;
// 构造器
public WifiAdmin(Context context) {
// 取得WifiManager对象
mWifiManager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
// 取得WifiInfo对象
mWifiInfo = mWifiManager.getConnectionInfo();
}
// 打开WIFI
public void openWifi() {
if (!mWifiManager.isWifiEnabled()) {
mWifiManager.setWifiEnabled(true);
}
}
// 关闭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 creatWifiLock() {
mWifiLock = mWifiManager.createWifiLock("Test");
}
// 得到配置好的网络
public List<WifiConfiguration> getConfiguration() {
return mWifiConfiguration;
}
// 指定配置好的网络进行连接
public void connectConfiguration(int index) {
// 索引大于配置好的网络索引返回
if (index > mWifiConfiguration.size()) {
return;
}
// 连接配置好的指定ID的网络
mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId,
true);
}
public void startScan() {
mWifiManager.startScan();
// 得到扫描结果
mWifiList = mWifiManager.getScanResults();
// 得到配置好的网络连接
mWifiConfiguration = mWifiManager.getConfiguredNetworks();
}
// 得到网络列表
public List<ScanResult> getWifiList() {
return mWifiList;
}
// 查看扫描结果
public StringBuilder lookUpScan() {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < mWifiList.size(); i++) {
stringBuilder
.append("Index_" + new Integer(i + 1).toString() + ":");
// 将ScanResult信息转换成一个字符串包
// 其中把包括:BSSID、SSID、capabilities、frequency、level
stringBuilder.append((mWifiList.get(i)).toString());
stringBuilder.append("/n");
}
return stringBuilder;
}
// 得到MAC地址
public String getMacAddress() {
return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress();
}
// 得到接入点的BSSID
public String getBSSID() {
return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID();
}
// 得到接入点的SSID
public String getSSID() {
return (mWifiInfo == null) ? "NULL" : mWifiInfo.getSSID();
}
// 得到IP地址
public int getIPAddress() {
return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();
}
// 得到连接的ID
public int getNetworkId() {
return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId();
}
// 得到WifiInfo的所有信息包
public String getWifiInfo() {
return (mWifiInfo == null) ? "NULL" : mWifiInfo.toString();
}
// 添加一个网络并连接
public void addNetwork(WifiConfiguration wcg) {
int wcgID = mWifiManager.addNetwork(wcg);
mWifiManager.enableNetwork(wcgID, true);
}
// 断开指定ID的网络
public void disconnectWifi(int netId) {
mWifiManager.disableNetwork(netId);
mWifiManager.disconnect();
}
}
新建一个Android项目,activity_main.xml布局文件:
<?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" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/scan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="扫描网络" />
<Button
android:id="@+id/start"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="打开Wifi" />
<Button
android:id="@+id/stop"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="关闭WiFi" />
<Button
android:id="@+id/check"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Wifi状态" />
</LinearLayout>
<TextView
android:id="@+id/tv_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="显示点击的信息" />
</LinearLayout>
MainActivity.Java文件:
public class MainActivity extends ActionBarActivity implements OnClickListener {
private TextView tv_content;
private Button scan;
private Button start;
private Button stop;
private Button check;
private WifiAdmin mWifiAdmin;
// 扫描结果列表
private List<ScanResult> list;
private ScanResult mScanResult;
private StringBuffer mStringBuffer = new StringBuffer();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWifiAdmin = new WifiAdmin(MainActivity.this);
InitView();
}
private void InitView() {
scan = (Button) findViewById(R.id.scan);
start = (Button) findViewById(R.id.start);
stop = (Button) findViewById(R.id.stop);
check = (Button) findViewById(R.id.check);
tv_content = (TextView) findViewById(R.id.tv_content);
scan.setOnClickListener(this);
start.setOnClickListener(this);
stop.setOnClickListener(this);
check.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.scan:
getAllNetWorkList();
break;
case R.id.start:
start();
break;
case R.id.stop:
stop();
break;
case R.id.check:
check();
break;
}
}
public void start() {
mWifiAdmin.openWifi();
Toast.makeText(MainActivity.this,
"当前Wifi网卡状态为" + mWifiAdmin.checkState(), Toast.LENGTH_SHORT)
.show();
}
public void stop() {
mWifiAdmin.closeWifi();
Toast.makeText(MainActivity.this,
"当前Wifi网卡状态为" + mWifiAdmin.checkState(), Toast.LENGTH_SHORT)
.show();
}
public void check() {
Toast.makeText(MainActivity.this,
"当前Wifi网卡状态为" + mWifiAdmin.checkState(), Toast.LENGTH_SHORT)
.show();
}
public void getAllNetWorkList() {
// 每次点击扫描之前清空上一次的扫描结果
if (mStringBuffer != null) {
mStringBuffer = new StringBuffer();
}
// 开始扫描网络
mWifiAdmin.startScan();
list = mWifiAdmin.getWifiList();
if (list != null) {
for (int i = 0; i < list.size(); i++) {
mScanResult = list.get(i);
// 得到网络的SSID:the network name
mStringBuffer = mStringBuffer.append(mScanResult.SSID)
.append("; ").append(mScanResult.BSSID)
.append("; ").append(mScanResult.capabilities)
.append("; ").append(mScanResult.frequency)
.append("; ").append(mScanResult.level)
.append("\n\n");
}
tv_content.setText("扫描到的所有Wifi网络:\n" + mStringBuffer.toString());
}
}
}
别忘了在AndroidManifest.xml中增加相关的权限:
运行结果: