標籤:android blog http io ar os 使用 sp for
最近在研究手機熱點的建立。HTC手機比較坑爹,首先一個,是不能按常規的辦法修改 SSID, BSSID,
在網上搜了下,有篇部落格把這個問題解決了,請參考:http://blog.sina.com.cn/s/blog_adc221ac01011mrs.html
然後就發現HTC手機熱點是建好了,但是其他手機去連它,怎麼也連不上,後來發現,使用靜態IP能解決這個問題,但太麻煩了。
研究了下通過手動設定HTC的WiFi熱點程式 com.htc.WiFiRouter 裡面有一個Local DHCP的配置,把它勾上就能自動擷取IP。
但要怎麼樣用代碼實現呢這下坑爹了。
研究了半天,還是只有把HTC專屬的類給它全部dump出來,代碼如下
public void dumpHTCWifiFunction2(){ Log.e(TAG, "dumpHTCWifiFunction2++");// Method[] classMethods = null; Field localField1; Field[] fieldlist; WifiConfiguration apConfig = new WifiConfiguration(); try { localField1 = WifiConfiguration.class.getDeclaredField("mWifiApProfile"); localField1.setAccessible(true); Object localObject2 = localField1.get(apConfig); localField1.setAccessible(false); if(localObject2!=null){ fieldlist = localObject2.getClass().getDeclaredFields(); for (int i = 0;i < fieldlist.length; i++) { Log.e(TAG, "found api: "+ fieldlist[i].getName()); } } } catch (NoSuchFieldException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } Log.e(TAG, "dumpHTCWifiFunction2--"); }
12-28 11:06:29.956: E/MainActivity(3253): dumpHTCWifiFunction2++
12-28 11:06:29.966: E/MainActivity(3253): found api: DEFAULT_DHCP_MAX_AP_CONNECTION
12-28 11:06:29.966: E/MainActivity(3253): found api: DEFAULT_MAX_AP_CONNECTION
12-28 11:06:29.976: E/MainActivity(3253): found api: DHCP_MAX_AP_CONNECTION
12-28 11:06:29.976: E/MainActivity(3253): found api: MAX_AP_CONNECTION
12-28 11:06:29.976: E/MainActivity(3253): found api: OPEN
12-28 11:06:29.976: E/MainActivity(3253): found api: WEP
12-28 11:06:29.986: E/MainActivity(3253): found api: WPA
12-28 11:06:29.986: E/MainActivity(3253): found api: WPA2
12-28 11:06:29.986: E/MainActivity(3253): found api: BSSID
12-28 11:06:29.996: E/MainActivity(3253): found api: SSID
12-28 11:06:29.996: E/MainActivity(3253): found api: blocklist
12-28 11:06:29.996: E/MainActivity(3253): found api: whitelist
12-28 11:06:29.996: E/MainActivity(3253): found api: this$0
12-28 11:06:30.006: E/MainActivity(3253): found api: startingIP
12-28 11:06:30.006: E/MainActivity(3253): found api: dhcpSubnetMask
12-28 11:06:30.016: E/MainActivity(3253): found api: dnsIPAddr1
12-28 11:06:30.016: E/MainActivity(3253): found api: dnsIPAddr2
12-28 11:06:30.016: E/MainActivity(3253): found api: secureType
12-28 11:06:30.016: E/MainActivity(3253): found api: key
12-28 11:06:30.016: E/MainActivity(3253): found api: ipAddress
12-28 11:06:30.016: E/MainActivity(3253): found api: hiddenSSID
12-28 11:06:30.016: E/MainActivity(3253): found api: maxConns
12-28 11:06:30.016: E/MainActivity(3253): found api: maxDhcpClients
12-28 11:06:30.026: E/MainActivity(3253): found api: enableMacFilter
12-28 11:06:30.026: E/MainActivity(3253): found api: sleepPolicy
12-28 11:06:30.026: E/MainActivity(3253): found api: dhcpEnable
12-28 11:06:30.026: E/MainActivity(3253): found api: connectionArray
12-28 11:06:30.026: E/MainActivity(3253): found api: channel
12-28 11:06:30.026: E/MainActivity(3253): dumpHTCWifiFunction2--
發現了 dhcpEnable 這個成員變數,剛開始猜它是boolean變數,但錯了,在設定的時候會發生錯誤。
乾脆把它的類型也列印出來吧,列印語句改為:
Log.e(TAG, "found api: "+ fieldlist[i].getName()+" type:"+fieldlist[i].toString());
found api: dhcpEnable type:public int android.net.wifi.WifiConfiguration$HotspotProfile.dhcpEnable
原來它是int型變數,估且猜它是1為enable. 設定之後,果然可以。
完整代碼如下:
private boolean setWifiSSIDForHTC(WifiConfiguration apConfig) { boolean successed = true; // WifiConfiguration mnetConfig = new WifiConfiguration(); Field localField1; try { localField1 = WifiConfiguration.class.getDeclaredField("mWifiApProfile"); localField1.setAccessible(true); Object localObject2 = localField1.get(apConfig); localField1.setAccessible(false); if(localObject2!=null){ Field localField5 = localObject2.getClass().getDeclaredField("SSID"); localField5.setAccessible(true); localField5.set(localObject2, apConfig.SSID);// netConfig.SSID); localField5.setAccessible(false); Field localField4 = localObject2.getClass().getDeclaredField("BSSID"); localField4.setAccessible(true); localField4.set(localObject2, apConfig.BSSID);//netConfig.BSSID); localField4.setAccessible(false); Field localField6 = localObject2.getClass().getDeclaredField("dhcpEnable"); localField6.setAccessible(true);// localField6.set(localObject2, "true");//netConfig.BSSID); localField6.setInt(localObject2, 1); localField6.setAccessible(false); } } catch(Exception e) { e.printStackTrace(); } return successed; }
- 相關文章推薦:
- 如何使用W7100A實現DHCP用戶端?
- 如何在W5200中實現DHCP
- 嵌入式Linux下MP4視頻錄製庫MP4V2移植和簡介
- 本文來自:愛好Linux技術網
- 本文連結:http://www.ahlinux.com/embed/7349.html
HTC Android Hotspot 熱點配置 之DHCP