文章目录
  1. 1. 思路
  2. 2. 实现功能
  3. 3. 实现代码
  4. 4. 效果展示
  5. 5. 源码地址
  6. 6. 参考地址:

产品提了一个需求,希望在手机上能够一键共享自己的移动网络。且希望用户能够通过扫描二维码链接上网络。

思路

经过各种谷歌和文档资料查询,发现 Android 的 API 是不支持对 AP 的操作。但是,这是难不倒我们的工程师的,通过谷歌搜索出来很多通过反射来管理 AP 的方法。这样第一个问题就算解决了。

然而,想要实现任何应用扫码连接共享的网络,有很多问题。二维码其实就是一个字符串的一种展现形式。想通过二维码链接网络,其实就是想通过一个字符串来改变世界啊!现在用户量较大的扫二维码应用都会有一些自己的协议,要实现我们的功能,我们必须要选择了通用的协议。扫二维码通用的协议,想来想去就只有链接地址了。一般扫码应用都是支持打开链接地址的。接下来的任务就要交给我们的 H5。想要通过 H5 来实现连接 WiFi 这个功能是不现实(不知道利用 H5 的漏洞能不能搞)。其实如果用户没有网络,二维码携带任何信息都没有什么乱用的。

通过反射技术来实现对热点的开关控制实现并不复杂,接下来简单介绍一下。

实现功能

一键建立热点主要需要实现如下功能:

  1. 获取当前 AP 的开关状态
  2. 打开和关闭 AP

实现代码

检测 AP 的状态,通过反射实现:

1
2
3
4
5
6
7
8
9
10
11
12
/**
* check whether wifi hotspot on or off
*/
public boolean isApOn() {
try {
Method method = wifiManager.getClass().getDeclaredMethod("isWifiApEnabled");
method.setAccessible(true);
return (Boolean) method.invoke(wifiManager);
}
catch (Throwable ignored) {}
return false;
}

打开和关闭 AP,反射实现代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 /**
* wifi热点开关
*
* @param enabled true:打开 false:关闭
* @return true:成功 false:失败
*/
public boolean setWifiApEnabled(boolean enabled) {
if (BuildConfig.DEBUG) Log.d("WifiAPMgr", "开启热点");
if (enabled) {
// wifi和热点不能同时打开,所以打开热点的时候需要关闭wifi
wifiManager.setWifiEnabled(false);
if (BuildConfig.DEBUG) Log.d("WifiAPMgr", "关闭wifi");
} else {
// wifiManager.setWifiEnabled(true);
}
try {
// 热点的配置类
WifiConfiguration apConfig = new WifiConfiguration();
// 配置热点的名称(可以在名字后面加点随机数什么的)
apConfig.SSID = apName;
// 配置热点的密码
apConfig.preSharedKey = apPwd;
// 安全:WPA2_PSK
apConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
// 通过反射调用设置热点
Method method = wifiManager.getClass().getMethod(
"setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE);
// 返回热点打开状态
return (Boolean) method.invoke(wifiManager, apConfig, enabled);
} catch (Exception e) {
return false;
}
}

效果展示

下载 APK 安装体验,下载地址:
https://raw.githubusercontent.com/jingle1267/OneKeyShareWifi/master/app-debug.apk

源码地址

https://github.com/jingle1267/OneKeyShareWifi

参考地址:

  1. http://stackoverflow.com/questions/6394599/android-turn-on-off-wifi-hotspot-programmatically
  2. http://blog.csdn.net/u013049709/article/details/42235829


本文地址 http://94275.cn/2017/01/13/android-wifi-hotspot/ 作者为 Zhenguo

author:Zhenguo
Author: Zhenguo      Blog: 94275.cn/     Email: jinzhenguo1990@gmail.com
I have almost 13 years of application development experience and have a keen interested in the latest emerging technologies. I use my spare time to turn my experience, ideas and love for IT tech into informative articles, tutorials and more in hope to help others and learn more.
文章目录
  1. 1. 思路
  2. 2. 实现功能
  3. 3. 实现代码
  4. 4. 效果展示
  5. 5. 源码地址
  6. 6. 参考地址:
返回顶部