【Android】Android之WiFi开发应用示例
在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>
|
最后看以下演示效果:
这些就是扫描到的wifi,具体参数参见上面介绍。
【Android】Android之WiFi开发应用示例相关推荐
- 最简单DIY基于ESP8266的智能彩灯⑥(Android开发通过WIFI控制彩灯实现表白神器)
ESP8266和ESP32智能彩灯开发系列文章目录 第一篇:最简单DIY基于ESP8266的智能彩灯①(在网页用按钮点亮普通RGB灯) 第二篇:最简单DIY基于ESP8266的智能彩灯②(在网页用按键 ...
- Android以太网和WIFI完美共存
Android以太网和WIFI完美共存 目前安卓设备主要为移动设备,安卓系统相应针对移动设备特性做了一些优化.考虑移动设备尽量降低功耗的需求,所以在网络部分设计了评分机制,(数据连接50,WIFI60 ...
- android wifi布局,如何实现Android状态栏的Wi-Fi搜索周边的列表和周围Wi-Fi强度图标切换?...
我想要实现例如Android状态栏以及筛选列表一样:链接之后就显示当前Wi-Fi信号状态图标,扫描之后进行周围链接的信号强度的显示. 第一个问题 实现的结果是都在一行. 在hashmap遍历中,我尝试 ...
- 【Android 逆向】Android 进程注入工具开发 ( 系统调用 | Android NDK 中的系统调用示例 )
文章目录 一.系统调用 二.Android NDK 中的系统调用示例 一.系统调用 在 " 用户层 " , 运行的都是用户应用程序 ; 用户层 下面 是 驱动层 , 驱动层 下面是 ...
- Android 监听 WiFi 开关状态
Android 监听 WiFi 开关状态 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/70854309 本文出自[赵彦军的博客] ...
- android 打印机打印html,Android下通过wifi调用打印机打印
Android下通过wifi调用打印机打印 // Code in Activity try { Socket sock = new Socket("192.168.199.245" ...
- android 获取连接WiFi的名称
今天,简单讲讲如何获取连接的WiFi的名称. 首先AndroidMainfest.xml文件中添加权限: <uses-permission android:name="android. ...
- Android中扫描wifi热点
1.首先新建了布局模板XML文件vifi.xml,代码很简单,如下: <?xml version="1.0" encoding="utf-8"?> ...
- Android手机用wifi连接adb调试的方法
https://www.jianshu.com/p/dc6898380e38 0x0 前言 Android开发肯定要连接pc的adb进行调试,传统的方法是用usb与pc进行连接,操作简单即插即用,缺点 ...
最新文章
- python selenium unittest_python+selenium+unittest——ui自动化的轻量级选择
- java 多线程 day12 读写锁
- 更高效的利用Jupyter+pandas进行数据分析,6种常用数据格式效率对比!
- mysql+影响的行数+获取_CI中获取读操作的结果集行数+获取写操作的影响行数
- 如果把电商的经营分为选品、供应链、视觉、营销四个环节
- SM2椭圆曲线公钥加密/解密算法
- 最适合学英语的50部动画电影(高清画质mkv,双语/双字幕可切换)
- 电脑知识 - bin文件夹是什么
- 计算机开机最快设置,w7提高开机速度如何操作_win7电脑怎么开机更快
- Map嵌套Map遍历
- Spoon Kettle 输入之获取文件名(Get file names)
- 移动硬盘位置不可用的数据恢复方法
- 家谱页面html,用CSS3 / HTML显示家谱
- ansible第一次使用模块报错
- 【Python】实现一个小说下载器,可以打包成exe(附原码)
- 存储卡 介质受写入保护 U盘无法删除文件 无法新建文件 存储卡无法删除文件 无法新建文件
- Greenplum集群部署和架构优化,我总结了5000字的心得
- 对要学习编程人员的忠告
- 人人可以是好厨子:72招做饭技巧帮你变大厨
- EmWin学习课堂_小白EmWin_EmWin快速入门_EmWin动态内存,显示和触摸屏_EmWin基础配置
热门文章
- Firefox, IE等不同浏览器对JavaScript,CSS不同解析问题 (转备以后使用)
- 部署redis mysql_【服务器部署Redis、Mysql等】-解决方式
- cdr 表格自动填充文字_「Excel技巧」Excel也可以实现自动填充26英文字母编号
- c语言malloc面试题,c语言面试最必考的十道试题,求职必看!!!
- java json格式字符串转为map_json格式的字符串序列化和反序列化的一些高级用法...
- 计算机入会大会新生发言稿,新生大会发言稿(精选3篇)
- 一次利用位图索引进行SQL优化的案例
- scrapy two
- anaconda的简单使用教程(虚拟环境安装)
- Qt实现基本QMainWindow主窗口程序