本文共 8301 字,大约阅读时间需要 27 分钟。
在中对操作,android本身提供了一些有用的包,在android.net.wifi包下面。主要包括以下几个类和接口:
1.ScanResult
主要用来描述已经检测出的接入点,包括接入点的地址,接入点的名称,身份认证,频率,信号强度等信息。
2.Configuration
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= "" |
3 | android:layout_width= "fill_parent" |
4 | android:layout_height= "fill_parent" |
5 | > |
6 |
7 | <LinearLayout |
8 | android:orientation= "vertical" |
9 | 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></div> |
44 | <div> |
接下来我们吧wifi的相关操作都封装在了一个WifiAdmin类中,以后开启或关闭等相关操作可以直接调用这个类的相关方法:
1 | </div> |
2 | </div> |
3 | <div>import java.util.List; |
4 |
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; |
11 |
12 | public class WifiAdmin { |
13 | //定义一个WifiManager对象 |
14 | private WifiManager mWifiManager; |
15 | //定义一个WifiInfo对象 |
16 | private WifiInfo mWifiInfo; |
17 | //扫描出的网络连接列表 |
18 | private List<ScanResult> mWifiList; |
19 | //网络连接列表 |
20 | private List<WifiConfiguration> mWifiConfigurations; |
21 | WifiLock mWifiLock; |
22 | public WifiAdmin(Context context){ |
23 | //取得WifiManager对象 |
24 | mWifiManager=(WifiManager) context.getSystemService(Context.WIFI_SERVICE); |
25 | //取得WifiInfo对象 |
26 | mWifiInfo=mWifiManager.getConnectionInfo(); |
27 | } |
28 | //打开wifi |
29 | public void openWifi(){ |
30 | if (!mWifiManager.isWifiEnabled()){ |
31 | mWifiManager.setWifiEnabled(true); |
32 | } |
33 | } |
34 | //关闭wifi |
35 | public void closeWifi(){ |
36 | if (mWifiManager.isWifiEnabled()){ |
37 | mWifiManager.setWifiEnabled(false); |
38 | } |
39 | } |
40 | // 检查当前wifi状态 |
41 | public int checkState() { |
42 | return mWifiManager.getWifiState(); |
43 | } |
44 | //锁定wifiLock |
45 | public void acquireWifiLock(){ |
46 | mWifiLock.acquire(); |
47 | } |
48 | //解锁wifiLock |
49 | public void releaseWifiLock(){ |
50 | //判断是否锁定 |
51 | if (mWifiLock.isHeld()){ |
52 | mWifiLock.acquire(); |
53 | } |
54 | } |
55 | //创建一个wifiLock |
56 | public void createWifiLock(){ |
57 | mWifiLock=mWifiManager.createWifiLock( "test" ); |
58 | } |
59 | //得到配置好的网络 |
60 | public List<WifiConfiguration> getConfiguration(){ |
61 | return mWifiConfigurations; |
62 | } |
63 | //指定配置好的网络进行连接 |
64 | public void connetionConfiguration(int index){ |
65 | if (index>mWifiConfigurations.size()){ |
66 | return ; |
67 | } |
68 | //连接配置好指定ID的网络 |
69 | mWifiManager.enableNetwork(mWifiConfigurations.get(index).networkId, true); |
70 | } |
71 | public void startScan(){ |
72 | mWifiManager.startScan(); |
73 | //得到扫描结果 |
74 | mWifiList=mWifiManager.getScanResults(); |
75 | //得到配置好的网络连接 |
76 | mWifiConfigurations=mWifiManager.getConfiguredNetworks(); |
77 | } |
78 | //得到网络列表 |
79 | public List<ScanResult> getWifiList(){ |
80 | return mWifiList; |
81 | } |
82 | //查看扫描结果 |
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() + ":" ); |
87 | // 将ScanResult信息转换成一个字符串包 |
88 | // 其中把包括:BSSID、SSID、capabilities、frequency、level |
89 | sb.append((mWifiList.get(i)).toString()).append( "\n" ); |
90 | } |
91 | return sb; |
92 | } |
93 | public String getMacAddress(){ |
94 | return (mWifiInfo==null)? "NULL" :mWifiInfo.getMacAddress(); |
95 | } |
96 | public String getBSSID(){ |
97 | return (mWifiInfo==null)? "NULL" :mWifiInfo.getBSSID(); |
98 | } |
99 | public int getIpAddress(){ |
100 | return (mWifiInfo==null)?0:mWifiInfo.getIpAddress(); |
101 | } |
102 | //得到连接的ID |
103 | public int getNetWordId(){ |
104 | return (mWifiInfo==null)?0:mWifiInfo.getNetworkId(); |
105 | } |
106 | //得到wifiInfo的所有信息 |
107 | public String getWifiInfo(){ |
108 | return (mWifiInfo==null)? "NULL" :mWifiInfo.toString(); |
109 | } |
110 | //添加一个网络并连接 |
111 | public void addNetWork(WifiConfiguration configuration){ |
112 | int wcgId=mWifiManager.addNetwork(configuration); |
113 | mWifiManager.enableNetwork(wcgId, true); |
114 | } |
115 | //断开指定ID的网络 |
116 | public void disConnectionWifi(int netId){ |
117 | mWifiManager.disableNetwork(netId); |
118 | mWifiManager.disconnect(); |
119 | } |
120 | }</div> |
121 | <div> |
最后看以下WifiActivity类:
1 | </div> |
2 | </div> |
3 | <div>import java.util.List; |
4 |
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; |
13 |
14 | public class WifiActivity extends Activity { |
15 | /** Called when the activity is first created. */ |
16 | private TextView allNetWork; |
17 | private Button scan; |
18 | private Button start; |
19 | private Button stop; |
20 | private Button check; |
21 | private WifiAdmin mWifiAdmin; |
22 | // 扫描结果列表 |
23 | private List<ScanResult> list; |
24 | private ScanResult mScanResult; |
25 | private StringBuffer sb= new StringBuffer(); |
26 | @Override |
27 | public void onCreate(Bundle savedInstanceState) { |
28 | super.onCreate(savedInstanceState); |
29 | setContentView(R.layout.main); |
30 | mWifiAdmin = new WifiAdmin(WifiActivity.this); |
31 | init(); |
32 | } |
33 | public void init(){ |
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()); |
43 | } |
44 | private class MyListener implements OnClickListener{ |
45 |
46 | @Override |
47 | public void onClick(View v) { |
48 | // TODO Auto-generated method stub |
49 | switch (v.getId()) { |
50 | case R.id.scan: //扫描网络 |
51 | getAllNetWorkList(); |
52 | break ; |
53 | case R.id.start: //打开Wifi |
54 | mWifiAdmin.openWifi(); |
55 | Toast.makeText(WifiActivity.this, "当前wifi状态为:" +mWifiAdmin.checkState(), 1).show(); |
56 | break ; |
57 | case R.id.stop: //关闭Wifi |
58 | mWifiAdmin.closeWifi(); |
59 | Toast.makeText(WifiActivity.this, "当前wifi状态为:" +mWifiAdmin.checkState(), 1).show(); |
60 | break ; |
61 | case R.id.check: //Wifi状态 |
62 | Toast.makeText(WifiActivity.this, "当前wifi状态为:" +mWifiAdmin.checkState(), 1).show(); |
63 | break ; |
64 | default : |
65 | break ; |
66 | } |
67 | } |
68 |
69 | } |
70 | public void getAllNetWorkList(){ |
71 | // 每次点击扫描之前清空上一次的扫描结果 |
72 | if (sb!=null){ |
73 | sb= new StringBuffer(); |
74 | } |
75 | //开始扫描网络 |
76 | mWifiAdmin.startScan(); |
77 | list=mWifiAdmin.getWifiList(); |
78 | if (list!=null){ |
79 | for (int i=0;i<list.size();i++){ |
80 | //得到扫描结果 |
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" ); |
85 | } |
86 | allNetWork.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> |
最后看以下演示效果:
这些就是扫描到的wifi,具体参数参见上面介绍。
转载地址:https://dengjin.blog.csdn.net/article/details/42642327 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关于作者
推荐文章
您的支持就是我的动力!您也可以点击二维码关闭!