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"
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>
- 【Android】Android之WiFi开发应用示例
- Android之WiFi开发应用示例
- android开发--WIFI应用开发
- android之wifi开发
- android之wifi开发
- android之wifi开发
- android之wifi开发
- Android开发之wifi
- android之wifi开发
- android之wifi开发
- Android开发之Wifi
- Android之Wifi开发
- android应用开发之判断wifi下局域网IP
- android应用开发之判断wifi下局域网IP
- Android/安卓开发之WIFI的基本应用
- Android-WiFi开发之 WiFi广播监听
- Android开发之WIFI操作
- Android Wifi开发之WifiConfiguration
- 应用程序2.4内核移植2.6内核常见错误告警分析
- 山海传说ai 设计
- python 发送邮件实例
- iOS 开发总结目录之【Swift 语法基础】
- phpexcel+mysql输出
- Android之WiFi开发应用示例
- Windows Phone 的控件
- 启动mysql报错(starting mysql..manager of pid-file quit without updating f[失败]) 解决方法集锦
- 固定电话号码正则表达式(支持手机号码,3-4位区号,7-8位直播号码,1-4位分机号)
- 求二叉树中叶子节点个数,总的节点个数,第K层的节点个数
- 关于CSQA的冲刺一些心得
- 程序员最新笑话集锦
- poj2241 - The Tower of Babylon
- python的timedelta