调用API设置安卓手机的Access Point
调用API设置安卓手机的Access Point
最近在做一个小的应用,需要通过程序设置安卓手机的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
作者: 黄博文 @无敌北瓜
出处: http://www.cnblogs.com/huang0925
黄博文的地盘
本文版权归本人和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
分类: Android
作者: Leo_wl
出处: http://www.cnblogs.com/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息查看更多关于调用API设置安卓手机的Access Point的详细内容...