WIFI是WLAN的一个标准,WIFI包含于 WLAN中,属于采用WLAN协议中的一项新技术。通俗地讲,WIFI就是一种无线联网技术,常见的是使用无线路由器。那么在这个无线路由器的信号覆盖的范围内都可以采用WIFI连接的方式进行联网。如果无线路由器连接了一个ADSL线路或其他的联网线路,则又被称为“热点”。
在Android中对Wifi操作,要依靠Android提供的关于WIFI的包,在android.NET.wifi包下面。主要包括以下几个类和接口:
- ScanResult
- WifiConfiguration
- WifiInfo
getBSSID() 获 取BSSID
getDetailedStateOf() 获取客户端的连通性
getHiddenSSID() 获得SSID 是否被隐藏
getIpAddress() 获取IP 地址
getLinkSpeed() 获得连接的速度
getMacAddress() 获得Mac 地址
getRssi() 获得802.11n 网络的信号
getSSID() 获得SSID
getSupplicanState() 返回具体客户端状态的信息
- WifiManager
获取WIFI网卡的状态
WIFI网卡的状态是由一系列的整形常量来表示的。
1.WIFI_STATE_DISABLED : WIFI网卡不可用(1)
2.WIFI_STATE_DISABLING : WIFI网卡正在关闭(0)
3.WIFI_STATE_ENABLED : WIFI网卡可用(3)
4.WIFI_STATE_ENABLING : WIFI网正在打开(2) (WIFI启动需要一段时间)
5.WIFI_STATE_UNKNOWN : 未知网卡状态
示例:
1、main_layout.xml
01.<?xml version="1.0" encoding="utf-8"?>
02.<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
03. android:layout_width="fill_parent"
04. android:layout_height="fill_parent"
05. >
06.
07. <LinearLayout
08. android:orientation="vertical"
09. android:layout_width="fill_parent"
10. android:layout_height="fill_parent"
11. >
12.<Button
13. android:id="@+id/scan"
14. android:layout_width="wrap_content"
15. android:layout_height="wrap_content"
16. android:text="扫描网络"
17. />
18.<Button
19. android:id="@+id/start"
20. android:layout_width="wrap_content"
21. android:layout_height="wrap_content"
22. android:text="打开Wifi"
23. />
24.<Button
25. android:id="@+id/stop"
26. android:layout_width="wrap_content"
27. android:layout_height="wrap_content"
28. android:text="关闭Wifi"
29. />
30.<Button
31. android:id="@+id/check"
32. android:layout_width="wrap_content"
33. android:layout_height="wrap_content"
34. android:text="Wifi状态"
35. />
36. <TextView
37. android:id="@+id/allNetWork"
38. android:layout_width="fill_parent"
39. android:layout_height="wrap_content"
40. android:text="当前没有扫描到Wifi网络"
41. />
42. </LinearLayout>
43.</ScrollView>
01.import java.util.List;
02.
03.import android.content.Context;
04.import android.net.wifi.ScanResult;
05.import android.net.wifi.WifiConfiguration;
06.import android.net.wifi.WifiInfo;
07.import android.net.wifi.WifiManager;
08.import android.net.wifi.WifiManager.WifiLock;
09.
10.public class WifiAdmin {
11. //定义一个WifiManager对象
12. private WifiManager mWifiManager;
13. //定义一个WifiInfo对象
14. private WifiInfo mWifiInfo;
15. //扫描出的网络连接列表
16. private List<ScanResult> mWifiList;
17. //网络连接列表
18. private List<WifiConfiguration> mWifiConfigurations;
19. WifiLock mWifiLock;
20. public WifiAdmin(Context context){
21. //取得WifiManager对象
22. mWifiManager=(WifiManager) context.getSystemService(Context.WIFI_SERVICE);
23. //取得WifiInfo对象
24. mWifiInfo=mWifiManager.getConnectionInfo();
25. }
26. //打开wifi
27. public void openWifi(){
28. if(!mWifiManager.isWifiEnabled()){
29. mWifiManager.setWifiEnabled(true);
30. }
31. }
32. //关闭wifi
33. public void closeWifi(){
34. if(!mWifiManager.isWifiEnabled()){
35. mWifiManager.setWifiEnabled(false);
36. }
37. }
38. // 检查当前wifi状态
39. public int checkState() {
40. return mWifiManager.getWifiState();
41. }
42. //锁定wifiLock
43. public void acquireWifiLock(){
44. mWifiLock.acquire();
45. }
46. //解锁wifiLock
47. public void releaseWifiLock(){
48. //判断是否锁定
49. if(mWifiLock.isHeld()){
50. mWifiLock.acquire();
51. }
52. }
53. //创建一个wifiLock
54. public void createWifiLock(){
55. mWifiLock=mWifiManager.createWifiLock("test");
56. }
57. //得到配置好的网络
58. public List<WifiConfiguration> getConfiguration(){
59. return mWifiConfigurations;
60. }
61. //指定配置好的网络进行连接
62. public void connetionConfiguration(int index){
63. if(index>mWifiConfigurations.size()){
64. return ;
65. }
66. //连接配置好指定ID的网络
67. mWifiManager.enableNetwork(mWifiConfigurations.get(index).networkId, true);
68. }
69. public void startScan(){
70. mWifiManager.startScan();
71. //得到扫描结果
72. mWifiList=mWifiManager.getScanResults();
73. //得到配置好的网络连接
74. mWifiConfigurations=mWifiManager.getConfiguredNetworks();
75. }
76. //得到网络列表
77. public List<ScanResult> getWifiList(){
78. return mWifiList;
79. }
80. //查看扫描结果
81. public StringBuffer lookUpScan(){
82. StringBuffer sb=new StringBuffer();
83. for(int i=0;i<mWifiList.size();i++){
84. sb.append("Index_" + new Integer(i + 1).toString() + ":");
85. // 将ScanResult信息转换成一个字符串包
86. // 其中把包括:BSSID、SSID、capabilities、frequency、level
87. sb.append((mWifiList.get(i)).toString()).append("\n");
88. }
89. return sb;
90. }
91. public String getMacAddress(){
92. return (mWifiInfo==null)?"NULL":mWifiInfo.getMacAddress();
93. }
94. public String getBSSID(){
95. return (mWifiInfo==null)?"NULL":mWifiInfo.getBSSID();
96. }
97. public int getIpAddress(){
98. return (mWifiInfo==null)?0:mWifiInfo.getIpAddress();
99. }
100. //得到连接的ID
101. public int getNetWordId(){
102. return (mWifiInfo==null)?0:mWifiInfo.getNetworkId();
103. }
104. //得到wifiInfo的所有信息
105. public String getWifiInfo(){
106. return (mWifiInfo==null)?"NULL":mWifiInfo.toString();
107. }
108. //添加一个网络并连接
109. public void addNetWork(WifiConfiguration configuration){
110. int wcgId=mWifiManager.addNetwork(configuration);
111. mWifiManager.enableNetwork(wcgId, true);
112. }
113. //断开指定ID的网络
114. public void disConnectionWifi(int netId){
115. mWifiManager.disableNetwork(netId);
116. mWifiManager.disconnect();
117. }
118.}
3、创建Android应用类:WifiActivity
01.import java.util.List;
02.
03.import android.app.Activity;
04.import android.net.wifi.ScanResult;
05.import android.os.Bundle;
06.import android.view.View;
07.import android.view.View.OnClickListener;
08.import android.widget.Button;
09.import android.widget.TextView;
10.import android.widget.Toast;
11.
12.public class WifiActivity extends Activity {
13. /** Called when the activity is first created. */
14. private TextView allNetWork;
15. private Button scan;
16. private Button start;
17. private Button stop;
18. private Button check;
19. private WifiAdmin mWifiAdmin;
20. // 扫描结果列表
21. private List<ScanResult> list;
22. private ScanResult mScanResult;
23. private StringBuffer sb=new StringBuffer();
24. @Override
25. public void onCreate(Bundle savedInstanceState) {
26. super.onCreate(savedInstanceState);
27. setContentView(R.layout.main);
28. mWifiAdmin = new WifiAdmin(WifiActivity.this);
29. init();
30. }
31. public void init(){
32. allNetWork = (TextView) findViewById(R.id.allNetWork);
33. scan = (Button) findViewById(R.id.scan);
34. start = (Button) findViewById(R.id.start);
35. stop = (Button) findViewById(R.id.stop);
36. check = (Button) findViewById(R.id.check);
37. scan.setOnClickListener(new MyListener());
38. start.setOnClickListener(new MyListener());
39. stop.setOnClickListener(new MyListener());
40. check.setOnClickListener(new MyListener());
41. }
42. private class MyListener implements OnClickListener{
43.
44. @Override
45. public void onClick(View v) {
46. // TODO Auto-generated method stub
47. switch (v.getId()) {
48. case R.id.scan://扫描网络
49. getAllNetWorkList();
50. break;
51. case R.id.start://打开Wifi
52. mWifiAdmin.openWifi();
53. Toast.makeText(WifiActivity.this, "当前wifi状态为:"+mWifiAdmin.checkState(), 1).show();
54. break;
55. case R.id.stop://关闭Wifi
56. mWifiAdmin.closeWifi();
57. Toast.makeText(WifiActivity.this, "当前wifi状态为:"+mWifiAdmin.checkState(), 1).show();
58. break;
59. case R.id.check://Wifi状态
60. Toast.makeText(WifiActivity.this, "当前wifi状态为:"+mWifiAdmin.checkState(), 1).show();
61. break;
62. default:
63. break;
64. }
65. }
66.
67. }
68. public void getAllNetWorkList(){
69. // 每次点击扫描之前清空上一次的扫描结果
70. if(sb!=null){
71. sb=new StringBuffer();
72. }
73. //开始扫描网络
74. mWifiAdmin.startScan();
75. list=mWifiAdmin.getWifiList();
76. if(list!=null){
77. for(int i=0;i<list.size();i++){
78. //得到扫描结果
79. mScanResult=list.get(i);
80. sb=sb.append(mScanResult.BSSID+" ").append(mScanResult.SSID+" ")
81. .append(mScanResult.capabilities+" ").append(mScanResult.frequency+" ")
82. .append(mScanResult.level+"\n\n");
83. }
84. allNetWork.setText("扫描到的wifi网络:\n"+sb.toString());
85. }
86. }
87.}
4、修改AndroidMenifest.xml文件,加入wifi访问网络所需的权限
01.<!-- 以下是使用wifi访问网络所需的权限 -->
02. <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>
03. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
04. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
05. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
5、运行结果