Какой вызов API мне нужно сделать в Android 2.2 (Froyo) для создания точки доступа Wi-Fi (как показано в пункте настроек Tethering and Portable Hotspot).
API точки доступа Wi-Fi для Android 2.2
Ответы (3)
Вы можете позвонить
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();
}
}
}
Он работает, но я не могу изменить текущую конфигурацию на свою, и получение текущей конфигурации WifiConfiguration активной точки доступа приводит меня к пустой конфигурации. Почему?
это работает с API 8 и выше. Я использую сильно другую версию, чем эта ниже (или выше), и столкнулся с той же проблемой, с которой столкнулся markov00; невозможность загрузить WifiConfiguration по умолчанию для портативной точки доступа 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();
}
}
}
Похоже, что не существует вызова API для создания точки доступа Wi-Fi - извините!