Android之WiFi开发应用示例
摘要: 在Android中对Wifi操作,android本身提供了一些有用的包,在android.net.wifi包下面。主要包括以下几个类和接口: 1.ScanResult 主要用来描述已经检测出的接入点,包括接入点的地址,接入点的名称,身份认证,频率,信号强度等信息。
在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"?>
|
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"
|
13 |
android:id="@+id/scan"
|
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"
|
25 |
android:id="@+id/stop"
|
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) {
|
54 |
mWifiAdmin.openWifi();
|
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(){
|
73 |
sb=new StringBuffer();
|
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>
|
最后看以下演示效果:
这些就是扫描到的wifi,具体参数参见上面介绍。