Android 2.2 wifi热点API

Tho*_*mas 24 java android wifi hotspot

我需要在Android 2.2(Froyo)中创建一个API调用来创建一个Wifi热点(如Tethering和Portable Hotspot设置项中所示).

mar*_*v00 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();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

它工作但我不能用我自己的配置更改当前配置,并获得当前的活动AP的WifiConfiguration驱动我为空配置.为什么?

  • @CommonsWare:对于嵌入式应用程序,使用特定固件和特定设备是完全可以的,而不是在应用程序市场上发布应用程序. (5认同)
  • @MatrixFrog:从战术上讲,它可能在当前设备上中断.设备制造商非常愿意代表运营商删除或更改此功能.假设任何非SDK代码都可以工作,甚至存在,那就简直不可靠了.如果您想将此代码用于您在自己的手机上使用的某些玩具应用程序,请成为我的客人.但是,只有傻瓜才能运送应用程序,这是为了让客户失望.从战略上讲,越多的开发人员越过SDK,我和其他人就越难以说服制造商不要搞砸SDK中应该支持的东西. (2认同)