Android 2.2 WiFi热点API

问题描述:

我需要在Android 2.2(Froyo)中创建一个Wifi热点(如在Tethering和Portable Hotspot设置项中所见),需要进行什么API调用。Android 2.2 WiFi热点API

+0

我仍然不能相信有用于激活/停用圈养没有API是很好的。希望它存在,但尚未记录。 – Sney 2010-07-02 13:04:00

+0

这是记录:http://www.androidjavadoc.com/2.3/android/net/wifi/WifiManager.html只是不是官方API的一部分。 – 2013-02-27 20:32:50

可以使用反射:)

得到WifiManager使用反射来获取WifiManager声明的方法调用后

private boolean setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled);

,寻找这个方法名setWifiApEnabled并通过WifiManager调用它对象

这些API被标记为@hide,所以目前你不能直接使用它们,但它们出现o n WifiManager的AIDL,以便他们可以访问!

一个例子可以是:

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
Method[] wmMethods = wifi.getClass().getDeclaredMethods(); 
for(Method method: wmMethods){ 
    if(method.getName().equals("setWifiApEnabled")){ 
    WifiConfiguration netConfig = new WifiConfiguration(); 
    netConfig.SSID = "\"PROVAAP\""; 
    netConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); 
    netConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN); 
    netConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA); 
    netConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); netConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 
    netConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 
    netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); 
    netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); 

    try { 
     method.invoke(wifi, netConfig,true); 
    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
    } catch (InvocationTargetException e) { 
     e.printStackTrace(); 
    } 
    } 
} 

它的工作原理,但我不能用我自己的改变目前的配置,并获得积极的AP当前WifiConfiguration开车带我到一个空configuration.Why?

+0

好调查 – Schildmeijer 2010-08-02 14:55:56

+0

你可以随时通过反射访问它们! – 2010-08-02 14:56:16

+0

@ markov00:您建议的方法不是Android SDK的一部分。不要使用它,期限。 – CommonsWare 2010-08-26 03:52:08

似乎没有创建WiFi热点的API调用 - 抱歉!

这适用于API 8及以上版本。我使用了一个完全不同的版本,然后在下面(或以上),并且遇到了markov00遇到的同一个问题;无法加载便携式Wi-Fi AP的默认WifiConfiguration。我在别处找到了解决方案。

如果你喜欢的解决方案,它将如果被接受作为一个答案

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
Method[] wmMethods = wifi.getClass().getDeclaredMethods(); 

for (Method method: wmMethods){ 
    if (method.getName().equals("setWifiApEnabled")){ 
     try { 
      // just nullify WifiConfiguration to load the default configuration ;) 
      method.invoke(wifi, null, true); 
     } catch (IllegalArgumentException e){ 
      e.printStackTrace(); 
     } catch (IllegalAccessException e){ 
      e.printStackTrace(); 
     } catch (InvocationTargetException e){ 
      e.printStackTrace(); 
     } 
    } 
} 
+0

因此,取消当前的一个它会接受你的WifiConfig? – bk138 2012-11-28 16:47:07

+0

不,但它只是使用默认,已经设置了一个 – slinden77 2012-11-28 20:40:31

+0

@dmmh,这是真的通过添加“method.invoke(wifi,null,true);”它被启用。所以我只是将布尔值更改为“false”将其关闭?怎么样检查它是否是开/关状态? – gumuruh 2014-06-23 04:47:20