Android 2.2 Wi-Fi точка доступа API - PullRequest
24 голосов
/ 11 июня 2010

Какой вызов API мне нужно сделать в Android 2.2 (Froyo), чтобы создать точку доступа Wi-Fi (как видно в пункте настроек «Модем и точка доступа»).

Ответы [ 3 ]

42 голосов
/ 02 августа 2010

Вы можете позвонить

private boolean setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled);

используя отражение:)

после получения WifiManager используйте отражение, чтобы получить объявленные методы WifiManager, найдите имя этого метода setWifiApEnabled и вызовите его через WifiManager объект

Эти API помечены как @hide, поэтому в настоящее время их нельзя использовать напрямую, но они отображаются в AIDL для WifiManager, поэтому они доступны!

Примером может быть:

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

Это работает, но я не могу изменить текущую конфигурацию своей собственной, и получение текущей конфигурации Wifi активной точки доступа приводит меня к пустой конфигурации. Почему?

4 голосов
/ 01 августа 2012

это работает на API 8 и выше. Я использую сильно отличную от этой версии версию ниже (или выше), и столкнулся с той же проблемой, с которой столкнулся markov00; невозможно загрузить стандартную конфигурацию Wi-Fi для портативной точки доступа Wi-Fi. Я нашел решение в другом месте.

Если вам нравится решение, было бы хорошо, если бы это было принято в качестве ответа

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();
        }
    }
}
2 голосов
/ 11 июня 2010

Похоже, что API-вызов для создания точки доступа WiFi отсутствует - извините!

...