Android之WiFi开发应用示例

来源:互联网 发布:彩绘软件下载 编辑:程序博客网 时间:2024/06/03 07:21

在Android中对Wifi操作,android本身提供了一些有用的包,在android.net.wifi包下面。主要包括以下几个类和接口:

1.ScanResult

主要用来描述已经检测出的接入点,包括接入点的地址,接入点的名称,身份认证,频率,信号强度等信息。

2.WifiConfiguration

Wifi网络的配置,包括安全设置等。

3.WifiInfo

wifi无线连接的描述,包括接入点,网络连接状态,隐藏的接入点,IP地址,连接速度,MAC地址,网络ID,信号强度等信息。这里简单介绍一下这里的方法:

getBSSID() 获取BSSID

getDetailedStateOf() 获取客户端的连通性

getHiddenSSID() 获得SSID 是否被隐藏

getIpAddress() 获取IP 地址

getLinkSpeed() 获得连接的速度

getMacAddress() 获得Mac 地址

getRssi() 获得802.11n 网络的信号

getSSID() 获得SSID

getSupplicanState() 返回具体客户端状态的信息

4.WifiManager

这个不用说,就是用来管理我们的wifi 连接,这里已经定义好了一些类,可以供我们使用。

获取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  : 未知网卡状态

下面先写一个wifi的实例:

        

点击打开wifi:                                        状态为3-WIFI网卡可用                         扫描到网络

首先看以下main.xml:

 
1<div><?xml version="1.0" encoding="utf-8"?>
2<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
3android:layout_width="fill_parent"
4android:layout_height="fill_parent"
5>
6 
7<LinearLayout
8android:orientation="vertical"
9android:layout_width="fill_parent"
10android:layout_height="fill_parent"
11>
12<Button
13android:id="@+id/scan"
14android:layout_width="wrap_content"
15android:layout_height="wrap_content"
16android:text="扫描网络"
17/>
18<Button
19android:id="@+id/start"
20android:layout_width="wrap_content"
21android:layout_height="wrap_content"
22android:text="打开Wifi"
23/>
24<Button
25android:id="@+id/stop"
26android:layout_width="wrap_content"
27android:layout_height="wrap_content"
28android:text="关闭Wifi"
29/>
30<Button
31android:id="@+id/check"
32android:layout_width="wrap_content"
33android:layout_height="wrap_content"
34android:text="Wifi状态"
35/>
36<TextView
37android:id="@+id/allNetWork"
38android:layout_width="fill_parent"
39android:layout_height="wrap_content"
40android:text="当前没有扫描到Wifi网络"
41/>
42</LinearLayout>
43</ScrollView></div>
44<div>

接下来我们吧wifi的相关操作都封装在了一个WifiAdmin类中,以后开启或关闭等相关操作可以直接调用这个类的相关方法:

1</div>
2</div>
3<div>import java.util.List;
4 
5import android.content.Context;
6import android.net.wifi.ScanResult;
7import android.net.wifi.WifiConfiguration;
8import android.net.wifi.WifiInfo;
9import android.net.wifi.WifiManager;
10import android.net.wifi.WifiManager.WifiLock;
11 
12public class WifiAdmin {
13//定义一个WifiManager对象
14private WifiManager mWifiManager;
15//定义一个WifiInfo对象
16private WifiInfo mWifiInfo;
17//扫描出的网络连接列表
18private List<ScanResult> mWifiList;
19//网络连接列表
20private List<WifiConfiguration> mWifiConfigurations;
21WifiLock mWifiLock;
22public WifiAdmin(Context context){
23//取得WifiManager对象
24mWifiManager=(WifiManager) context.getSystemService(Context.WIFI_SERVICE);
25//取得WifiInfo对象
26mWifiInfo=mWifiManager.getConnectionInfo();
27}
28//打开wifi
29public void openWifi(){
30if(!mWifiManager.isWifiEnabled()){
31mWifiManager.setWifiEnabled(true);
32}
33}
34//关闭wifi
35public void closeWifi(){
36if(mWifiManager.isWifiEnabled()){
37mWifiManager.setWifiEnabled(false);
38}
39}
40// 检查当前wifi状态
41public int checkState() {
42return mWifiManager.getWifiState();
43}
44//锁定wifiLock
45public void acquireWifiLock(){
46mWifiLock.acquire();
47}
48//解锁wifiLock
49public void releaseWifiLock(){
50//判断是否锁定
51if(mWifiLock.isHeld()){
52mWifiLock.acquire();
53}
54}
55//创建一个wifiLock
56public void createWifiLock(){
57mWifiLock=mWifiManager.createWifiLock("test");
58}
59//得到配置好的网络
60public List<WifiConfiguration> getConfiguration(){
61return mWifiConfigurations;
62}
63//指定配置好的网络进行连接
64public void connetionConfiguration(int index){
65if(index>mWifiConfigurations.size()){
66return ;
67}
68//连接配置好指定ID的网络
69mWifiManager.enableNetwork(mWifiConfigurations.get(index).networkId, true);
70}
71public void startScan(){
72mWifiManager.startScan();
73//得到扫描结果
74mWifiList=mWifiManager.getScanResults();
75//得到配置好的网络连接
76mWifiConfigurations=mWifiManager.getConfiguredNetworks();
77}
78//得到网络列表
79public List<ScanResult> getWifiList(){
80return mWifiList;
81}
82//查看扫描结果
83public StringBuffer lookUpScan(){
84StringBuffer sb=new StringBuffer();
85for(int i=0;i<mWifiList.size();i++){
86sb.append("Index_" new Integer(i + 1).toString() + ":");
87// 将ScanResult信息转换成一个字符串包
88// 其中把包括:BSSID、SSID、capabilities、frequency、level
89sb.append((mWifiList.get(i)).toString()).append("\n");
90}
91return sb;
92}
93public String getMacAddress(){
94return (mWifiInfo==null)?"NULL":mWifiInfo.getMacAddress();
95}
96public String getBSSID(){
97return (mWifiInfo==null)?"NULL":mWifiInfo.getBSSID();
98}
99public int getIpAddress(){
100return (mWifiInfo==null)?0:mWifiInfo.getIpAddress();
101}
102//得到连接的ID
103public int getNetWordId(){
104return (mWifiInfo==null)?0:mWifiInfo.getNetworkId();
105}
106//得到wifiInfo的所有信息
107public String getWifiInfo(){
108return (mWifiInfo==null)?"NULL":mWifiInfo.toString();
109}
110//添加一个网络并连接
111public void addNetWork(WifiConfiguration configuration){
112int wcgId=mWifiManager.addNetwork(configuration);
113mWifiManager.enableNetwork(wcgId, true);
114}
115//断开指定ID的网络
116public void disConnectionWifi(int netId){
117mWifiManager.disableNetwork(netId);
118mWifiManager.disconnect();
119}
120}</div>
121<div>

最后看以下WifiActivity类:

 
1</div>
2</div>
3<div>import java.util.List;
4 
5import android.app.Activity;
6import android.net.wifi.ScanResult;
7import android.os.Bundle;
8import android.view.View;
9import android.view.View.OnClickListener;
10import android.widget.Button;
11import android.widget.TextView;
12import android.widget.Toast;
13 
14public class WifiActivity extends Activity {
15/** Called when the activity is first created. */
16private TextView allNetWork;
17private Button scan;
18private Button start;
19private Button stop;
20private Button check;
21private WifiAdmin mWifiAdmin;
22// 扫描结果列表
23private List<ScanResult> list;
24private ScanResult mScanResult;
25private StringBuffer sb=new StringBuffer();
26@Override
27public void onCreate(Bundle savedInstanceState) {
28super.onCreate(savedInstanceState);
29setContentView(R.layout.main);
30mWifiAdmin = new WifiAdmin(WifiActivity.this);
31init();
32}
33public void init(){
34allNetWork = (TextView) findViewById(R.id.allNetWork);
35scan = (Button) findViewById(R.id.scan);
36start = (Button) findViewById(R.id.start);
37stop = (Button) findViewById(R.id.stop);
38check = (Button) findViewById(R.id.check);
39scan.setOnClickListener(new MyListener());
40start.setOnClickListener(new MyListener());
41stop.setOnClickListener(new MyListener());
42check.setOnClickListener(new MyListener());
43}
44private class MyListener implements OnClickListener{
45 
46@Override
47public void onClick(View v) {
48// TODO Auto-generated method stub
49switch (v.getId()) {
50case R.id.scan://扫描网络
51getAllNetWorkList();
52break;
53case R.id.start://打开Wifi
54mWifiAdmin.openWifi();
55Toast.makeText(WifiActivity.this, "当前wifi状态为:"+mWifiAdmin.checkState(), 1).show();
56break;
57case R.id.stop://关闭Wifi
58mWifiAdmin.closeWifi();
59Toast.makeText(WifiActivity.this, "当前wifi状态为:"+mWifiAdmin.checkState(), 1).show();
60break;
61case R.id.check://Wifi状态
62Toast.makeText(WifiActivity.this, "当前wifi状态为:"+mWifiAdmin.checkState(), 1).show();
63break;
64default:
65break;
66}
67}
68 
69}
70public void getAllNetWorkList(){
71// 每次点击扫描之前清空上一次的扫描结果
72if(sb!=null){
73sb=new StringBuffer();
74}
75//开始扫描网络
76mWifiAdmin.startScan();
77list=mWifiAdmin.getWifiList();
78if(list!=null){
79for(int i=0;i<list.size();i++){
80//得到扫描结果
81mScanResult=list.get(i);
82sb=sb.append(mScanResult.BSSID+"  ").append(mScanResult.SSID+"   ")
83.append(mScanResult.capabilities+"   ").append(mScanResult.frequency+"   ")
84.append(mScanResult.level+"\n\n");
85}
86allNetWork.setText("扫描到的wifi网络:\n"+sb.toString());
87}
88}
89}</div>
90<div>

不要忘了加入权限:

1<!-- 以下是使用wifi访问网络所需的权限 -->
2<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>
3<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
4<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
5<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission></div>
6<div>