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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM