调用API设置安卓手机的Access Point-阿里云开发者社区

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

调用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

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

相关文章
调用API设置安卓手机的Access Point
最近在做一个小的应用,需要通过程序设置安卓手机的AP(Access point, 即将手机变为一个移动热点,其他机器能够通过wifi连接到此手机)。原以为很简单的一个东西,还是花费了一番周折,最终还是搞定了。
719 0
创建一个新的安卓应用程序 设置主Activity
File--New--Android application Project 取消勾选Create activity src文件中新建类 MainActivity   主类继承Activity public class MainActivity extends Activity{ ...
543 0
OPPOR9手机便签怎么设置时间提醒?
阿平一直是OPPO手机的忠实粉丝,OPPO手机性能配置性价比也比较高,又请了很多明星来代言,知名度棒棒哒。 阿平上一个手机是OPPOR7,平日用的比较频繁的系统工具是便签。
1226 0
Intellij IDEA 设置代码着色
从visual studio到Eclipse再到Intllij IDEA,其实每个编译器都有自己的风格,但是就美观上来说,个人觉得还是visual studio的代码着色比较美观,exlipse次之,idea真的没有美观而言,虽然它的功能很强大,于是自己更改了idea的代码着色,下面几张图示,希望你...
631 0
使用eruda进行手机端调试
使用eruda手机端调试
20 0
+关注
无敌西瓜
黄博文,ThoughtWorks资深软件工程师/咨询师。在国内外多家企业做过技术教练以及技术咨询,拥有丰富的敏捷团队工作经验。拥有AWS解决方案架构师以及开发者证书。译作有《面向对象的思考过程》、《基础设施即代码》等。
173
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《Nacos架构&原理》
立即下载
《看见新力量:二》电子书
立即下载
云上自动化运维(CloudOps)白皮书
立即下载