Я пытаюсь запустить горячую точку с новым именем и открывать доступность.
wifiConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
wifiConfig.SSID = "\"MySSID\"";
wifiConfig.networkId = 1;
methodNum = getMethodNumber("setWifiApEnabled");
try {
wmMethods[methodNum].invoke(wifiManager, wifiConfig, true);
} catch (IllegalArgumentException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IllegalAccessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (InvocationTargetException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Я получаю правильный метод и кажется, что он запускает горячую точку телефона, но конфигурация не изменяется.
Я попытался получить текущие данные конфигурации с помощью getWifiApConfiguration и я ничего не получаю с ним, никаких ssid, а не текущего шифрования.
Я использую HTC Evo 3d для отладки.
Кажется, что это проблема с HTC. Некоторые из моих друзей пробовали аналогичный код на HTC и других устройствах. Не работал на HTC, работал над другими.
Некоторые телефоны htc, похоже, используют класс типа HotspotProfile для сохранения его конфигурации. Поэтому перед вызовом setWifiApEnabled вам нужно установить ssid в htc образом:
if (isHtc) setHTCSSID(config);
methodNum = getMethodNumber("setWifiApEnabled");
try {
wmMethods[methodNum].invoke(wifiManager, wifiConfig, true);
...
isHtc может быть вычислен как:
try { isHtc = null!=WifiConfiguration.class. getDeclaredField("mWifiApProfile"); }
catch (java.lang.NoSuchFieldException e) { isHtc = false }
и setHTCSSID будет:
public void setHTCSSID(WifiConfiguration config) {
try {
Field mWifiApProfileField = WifiConfiguration.class.getDeclaredField("mWifiApProfile");
mWifiApProfileField.setAccessible(true);
Object hotSpotProfile = mWifiApProfileField.get(config);
mWifiApProfileField.setAccessible(false);
if(hotSpotProfile!=null){
Field ssidField = hotSpotProfile.getClass().getDeclaredField("SSID");
ssidField.setAccessible(true);
ssidField.set(hotSpotProfile, config.SSID);
ssidField.setAccessible(false);
}
} catch(Exception e) {
e.printStackTrace();
}
}
Я нашел эту информацию в некоторых китайских блогах: http://xiaxingwork.iteye.com/blog/1727722 и http://blog.sina.com.cn/s/blog_53dd443a010109i8.html