java - rates - real time forex news
Android 2.2 wifi hotspot API (3)
¿Cuál es la llamada a la API que necesito hacer en Android 2.2 (Froyo) para crear un punto de acceso Wifi (como se ve en el elemento de configuración Anclaje a red y punto de acceso portátil)?
No parece haber una llamada a la API para crear un punto de acceso WiFi. ¡Lo siento!
Puedes llamar
private boolean setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled);
utilizando la reflexión :)
después de que el WifiManager
use la reflexión para obtener los métodos declarados de WifiManager
, busque el nombre de este método setWifiApEnabled
e setWifiApEnabled
a través del objeto WifiManager
Estas API están marcadas como @hide, por lo que actualmente no puede usarlas directamente, pero aparecen en el AIDL para el WifiManager, por lo que son accesibles.
Un ejemplo puede ser:
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();
}
}
}
Funciona, pero no puedo cambiar la configuración actual con la mía, y obtener la configuración de Wifi actual de un AP activo me lleva a una configuración vacía. ¿Por qué?
esto funciona en API 8 y superior. Utilizo una versión muy diferente de la siguiente a continuación (o superior), y me encontré con el mismo problema al que se topó markov00; no poder cargar la Configuración Wifi predeterminada para el Wi-Fi AP portátil. Encontré una solución en otro lado.
Si le gusta la solución, sería bueno si se aceptara como respuesta.
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();
}
}
}