开发者社区> 无敌西瓜> 正文

调用API设置安卓手机的Access Point

简介: 最近在做一个小的应用,需要通过程序设置安卓手机的AP(Access point, 即将手机变为一个移动热点,其他机器能够通过wifi连接到此手机)。原以为很简单的一个东西,还是花费了一番周折,最终还是搞定了。
+关注继续查看

最近在做一个小的应用,需要通过程序设置安卓手机的AP(Access point, 即将手机变为一个移动热点,其他机器能够通过wifi连接到此手机)。原以为很简单的一个东西,还是花费了一番周折,最终还是搞定了。

配置AP的选项是属于配置wifi的一部分,所以他们都在WifiManager这个类中。 获取当前系统的WifiManager实例的方法是:

1
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);

此类中有几个关键方法用来设置AP,但是它们都是被隐藏的,我们无法直接调用,所以只有通过反射的方式来调用。

获取AP当前状态的方法是:

1
2
3
4
private Boolean getApState(WifiManager wifi) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
        Method method = wifi.getClass().getMethod("isWifiApEnabled");
        return (Boolean) method.invoke(wifi);
    }

配置AP要使用到WifiConfiguration这个类,以下是设置的一个AP。

1
2
3
4
5
6
7
8
9
10
11
12
private WifiConfiguration getApConfiguration() {
        WifiConfiguration apConfig = new WifiConfiguration();
        //配置热点的名称
        apConfig.SSID = "yourId";
        apConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
        apConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
        apConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
        apConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
        //配置热点的密码
        apConfig.preSharedKey = "yourPassword";
        return apConfig;
    }

应用AP配置并启用AP要使用另一个被隐藏的方法setWifiApEnabled需要注意的是启用AP前要将当前手机的wifi关闭,否则会启动失败。

1
2
3
4
5
6
7
8
9
    private void setWifiAp() {


        Method method = wifi.getClass().getMethod(
                "setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE);

        wifi.setWifiEnabled(false);
        method.invoke(wifi, null, true);
    }

最后,一定要注意要在AndroidManifest.xml文件中设置几个权限。否则在调用API时会产生java.lang.SecurityException: Permission Denied的异常。 需要加入的权限如下:

1
2
3
4
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />

源码我已经放置到github上了,需要的请自行checkout。地址是:https://github.com/huangbowen521/APSwitch

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
苹果手机提醒事项怎么设置农历生日提醒?
阿芳的麻麻生日快到了,因为刚开始上班,身为一个初入社会的菜鸟,工作很忙碌。阿芳害怕自己会忘记麻麻的农历生日,就打开手机的提醒事项,把生日日期记录进去。
1818 0
OPPOR9手机便签怎么设置时间提醒?
阿平一直是OPPO手机的忠实粉丝,OPPO手机性能配置性价比也比较高,又请了很多明星来代言,知名度棒棒哒。 阿平上一个手机是OPPOR7,平日用的比较频繁的系统工具是便签。
1280 0
使用eruda进行手机端调试
使用eruda手机端调试
33 0
IntelliJ IDEA 设置代码提示或自动补全的快捷键
对于中国的Java开发者来说,可能使用Eclipse的人最多。 使用Idea的程序员也不少, 而且每个人都在鼓吹其好用之处。 试用半个月,感觉各有千秋,关键看熟练程度和配置是否好用。
1259 0
调用API设置安卓手机的Access Point
最近在做一个小的应用,需要通过程序设置安卓手机的AP(Access point, 即将手机变为一个移动热点,其他机器能够通过wifi连接到此手机)。原以为很简单的一个东西,还是花费了一番周折,最终还是搞定了。
743 0
Android(安卓) U8800 长按 搜索键、返回键 锁屏或解锁的设置方法
该设置办法适用于所有android手机,当然包括U8800了。   * 首先手机一定要有ROOT权限,关于如何获得ROOT权限,这里就不多说了,一般安装个ROOT的小软件就搞定了。   安装一个R.E管理器(Root Explorer),运行R.
1003 0
Intellij IDEA 设置代码着色
从visual studio到Eclipse再到Intllij IDEA,其实每个编译器都有自己的风格,但是就美观上来说,个人觉得还是visual studio的代码着色比较美观,exlipse次之,idea真的没有美观而言,虽然它的功能很强大,于是自己更改了idea的代码着色,下面几张图示,希望你...
697 0
+关注
无敌西瓜
黄博文,ThoughtWorks资深软件工程师/咨询师。在国内外多家企业做过技术教练以及技术咨询,拥有丰富的敏捷团队工作经验。拥有AWS解决方案架构师以及开发者证书。译作有《面向对象的思考过程》、《基础设施即代码》等。
173
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载