在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的实例:
![](http://hi.csdn.net/attachment/201203/10/0_13313625286qRq.gif)
点击打开wifi: 状态为3-WIFI网卡可用 扫描到网络
首先看以下main.xml:
1 | <div><?xml version= "1.0" encoding= "utf-8" ?> |
3 | android:layout_width= "fill_parent" |
4 | android:layout_height= "fill_parent" |
8 | android:orientation= "vertical" |
9 | android:layout_width= "fill_parent" |
10 | android:layout_height= "fill_parent" |
14 | android:layout_width= "wrap_content" |
15 | android:layout_height= "wrap_content" |
19 | android:id= "@+id/start" |
20 | android:layout_width= "wrap_content" |
21 | android:layout_height= "wrap_content" |
26 | android:layout_width= "wrap_content" |
27 | android:layout_height= "wrap_content" |
31 | android:id= "@+id/check" |
32 | android:layout_width= "wrap_content" |
33 | android:layout_height= "wrap_content" |
37 | android:id= "@+id/allNetWork" |
38 | android:layout_width= "fill_parent" |
39 | android:layout_height= "wrap_content" |
40 | android:text= "当前没有扫描到Wifi网络" |
接下来我们吧wifi的相关操作都封装在了一个WifiAdmin类中,以后开启或关闭等相关操作可以直接调用这个类的相关方法:
3 | <div>import java.util.List; |
5 | import android.content.Context; |
6 | import android.net.wifi.ScanResult; |
7 | import android.net.wifi.WifiConfiguration; |
8 | import android.net.wifi.WifiInfo; |
9 | import android.net.wifi.WifiManager; |
10 | import android.net.wifi.WifiManager.WifiLock; |
12 | public class WifiAdmin { |
14 | private WifiManager mWifiManager; |
16 | private WifiInfo mWifiInfo; |
18 | private List<ScanResult> mWifiList; |
20 | private List<WifiConfiguration> mWifiConfigurations; |
22 | public WifiAdmin(Context context){ |
24 | mWifiManager=(WifiManager) context.getSystemService(Context.WIFI_SERVICE); |
26 | mWifiInfo=mWifiManager.getConnectionInfo(); |
29 | public void openWifi(){ |
30 | if (!mWifiManager.isWifiEnabled()){ |
31 | mWifiManager.setWifiEnabled(true); |
35 | public void closeWifi(){ |
36 | if (mWifiManager.isWifiEnabled()){ |
37 | mWifiManager.setWifiEnabled(false); |
41 | public int checkState() { |
42 | return mWifiManager.getWifiState(); |
45 | public void acquireWifiLock(){ |
49 | public void releaseWifiLock(){ |
51 | if (mWifiLock.isHeld()){ |
56 | public void createWifiLock(){ |
57 | mWifiLock=mWifiManager.createWifiLock( "test" ); |
60 | public List<WifiConfiguration> getConfiguration(){ |
61 | return mWifiConfigurations; |
64 | public void connetionConfiguration(int index){ |
65 | if (index>mWifiConfigurations.size()){ |
69 | mWifiManager.enableNetwork(mWifiConfigurations.get(index).networkId, true); |
71 | public void startScan(){ |
72 | mWifiManager.startScan(); |
74 | mWifiList=mWifiManager.getScanResults(); |
76 | mWifiConfigurations=mWifiManager.getConfiguredNetworks(); |
79 | public List<ScanResult> getWifiList(){ |
83 | public StringBuffer lookUpScan(){ |
84 | StringBuffer sb= new StringBuffer(); |
85 | for (int i=0;i<mWifiList.size();i++){ |
86 | sb.append( "Index_" + new Integer(i + 1).toString() + ":" ); |
89 | sb.append((mWifiList.get(i)).toString()).append( "\n" ); |
93 | public String getMacAddress(){ |
94 | return (mWifiInfo==null)? "NULL" :mWifiInfo.getMacAddress(); |
96 | public String getBSSID(){ |
97 | return (mWifiInfo==null)? "NULL" :mWifiInfo.getBSSID(); |
99 | public int getIpAddress(){ |
100 | return (mWifiInfo==null)?0:mWifiInfo.getIpAddress(); |
103 | public int getNetWordId(){ |
104 | return (mWifiInfo==null)?0:mWifiInfo.getNetworkId(); |
107 | public String getWifiInfo(){ |
108 | return (mWifiInfo==null)? "NULL" :mWifiInfo.toString(); |
111 | public void addNetWork(WifiConfiguration configuration){ |
112 | int wcgId=mWifiManager.addNetwork(configuration); |
113 | mWifiManager.enableNetwork(wcgId, true); |
116 | public void disConnectionWifi(int netId){ |
117 | mWifiManager.disableNetwork(netId); |
118 | mWifiManager.disconnect(); |
最后看以下WifiActivity类:
3 | <div>import java.util.List; |
5 | import android.app.Activity; |
6 | import android.net.wifi.ScanResult; |
7 | import android.os.Bundle; |
8 | import android.view.View; |
9 | import android.view.View.OnClickListener; |
10 | import android.widget.Button; |
11 | import android.widget.TextView; |
12 | import android.widget.Toast; |
14 | public class WifiActivity extends Activity { |
16 | private TextView allNetWork; |
21 | private WifiAdmin mWifiAdmin; |
23 | private List<ScanResult> list; |
24 | private ScanResult mScanResult; |
25 | private StringBuffer sb= new StringBuffer(); |
27 | public void onCreate(Bundle savedInstanceState) { |
28 | super.onCreate(savedInstanceState); |
29 | setContentView(R.layout.main); |
30 | mWifiAdmin = new WifiAdmin(WifiActivity.this); |
34 | allNetWork = (TextView) findViewById(R.id.allNetWork); |
35 | scan = (Button) findViewById(R.id.scan); |
36 | start = (Button) findViewById(R.id.start); |
37 | stop = (Button) findViewById(R.id.stop); |
38 | check = (Button) findViewById(R.id.check); |
39 | scan.setOnClickListener( new MyListener()); |
40 | start.setOnClickListener( new MyListener()); |
41 | stop.setOnClickListener( new MyListener()); |
42 | check.setOnClickListener( new MyListener()); |
44 | private class MyListener implements OnClickListener{ |
47 | public void onClick(View v) { |
55 | Toast.makeText(WifiActivity.this, "当前wifi状态为:" +mWifiAdmin.checkState(), 1).show(); |
58 | mWifiAdmin.closeWifi(); |
59 | Toast.makeText(WifiActivity.this, "当前wifi状态为:" +mWifiAdmin.checkState(), 1).show(); |
62 | Toast.makeText(WifiActivity.this, "当前wifi状态为:" +mWifiAdmin.checkState(), 1).show(); |
70 | public void getAllNetWorkList(){ |
76 | mWifiAdmin.startScan(); |
77 | list=mWifiAdmin.getWifiList(); |
79 | for (int i=0;i<list.size();i++){ |
81 | mScanResult=list.get(i); |
82 | sb=sb.append(mScanResult.BSSID+ " " ).append(mScanResult.SSID+ " " ) |
83 | .append(mScanResult.capabilities+ " " ).append(mScanResult.frequency+ " " ) |
84 | .append(mScanResult.level+ "\n\n" ); |
86 | allNetWork.setText( "扫描到的wifi网络:\n" +sb.toString()); |
不要忘了加入权限:
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> |