安卓 2.2 无线热点 API

2022-09-01 20:21:45

我需要在Android 2.2(Froyo)中进行哪些API调用才能创建Wifi热点(如网络共享和便携式热点设置项所示)。


答案 1

您可以致电

private boolean setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled);

使用反射:)

在获取使用反射来获取声明的方法后,查找此方法名称并通过对象调用它WifiManagerWifiManagersetWifiApEnabledWifiManager

这些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的当前Wifi配置驱动器我驱动到空配置。为什么?


答案 2

这适用于 API 8 及更高版本。我使用一个完全不同于下面的版本(或上面),并且遇到了markov00遇到的相同问题;无法加载便携式 Wi-Fi AP 的默认 Wifi 配置。我在其他地方找到了解决方案。

如果您喜欢该解决方案,如果将其作为答案接受,那就太好了

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();
        }
    }
}

推荐