我需要在 Android 2.2 (Froyo) 中调用什么 API 来创建 Wifi 热点(如 Tethering and Portable Hotspot 设置项中所示)。
问问题
22693 次
3 回答
42
你可以打电话
private boolean setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled);
使用反射:)
获取到WifiManager
使用反射获取WifiManager
声明的方法后,查找该方法名setWifiApEnabled
并通过WifiManager
对象调用
这些 API 被标记为 @hide,因此目前您无法直接使用它们,但它们出现在 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 会将我驱动为空配置。为什么?
于 2010-08-02T14:53:09.953 回答
4
这适用于 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();
}
}
}
于 2012-07-31T20:17:12.517 回答
2
似乎没有创建 WiFi 热点的 API 调用——抱歉!
于 2010-06-11T14:44:58.463 回答