java - Cambiar el SSID y la contraseña del punto de acceso WiFi en Android Oreo 8.x
android-wifi android-8.0-oreo (1)
Solo tengo una solución parcial al problema. Con suerte, será suficiente para la aplicación que está diseñando.
El SSID y la contraseña están codificados de forma rígida por el sistema Android al iniciar el Hotspot . Al mirar el código AOSP, veo que múltiples aplicaciones pueden compartir el mismo punto de acceso. La configuración de este punto de acceso (el nombre de la clase es WifiConfiguration
) también se comparte con todas las aplicaciones solicitantes. Esta configuración se devuelve a la aplicación en la devolución de llamada en onStarted(LocalOnlyHotspotReservation reservation)
. Puede obtener la WifiConfiguration
de WifiConfiguration
llamando a reservation.getWifiConfiguration()
. Obtendrá toda la información que necesita del objeto WifiConfiguration
. Para que pueda leer la clave precompartida y el nombre del punto de acceso. Pero no creo que puedas cambiarlos.
Para su información, el código relevante que configura la configuración wifi (incluido el SSID codificado y la clave WPA2-PSK) se realiza mediante el siguiente fragmento de código
/**
* Generate a temporary WPA2 based configuration for use by the local only hotspot.
* This config is not persisted and will not be stored by the WifiApConfigStore.
*/
public static WifiConfiguration generateLocalOnlyHotspotConfig(Context context) {
WifiConfiguration config = new WifiConfiguration();
config.SSID = context.getResources().getString(
R.string.wifi_localhotspot_configure_ssid_default) + "_"
+ getRandomIntForDefaultSsid();
config.allowedKeyManagement.set(KeyMgmt.WPA2_PSK);
config.networkId = WifiConfiguration.LOCAL_ONLY_NETWORK_ID;
String randomUUID = UUID.randomUUID().toString();
// first 12 chars from xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
config.preSharedKey = randomUUID.substring(0, 8) + randomUUID.substring(9, 13);
return config;
}
En mi aplicación de Android estoy usando el siguiente fragmento de código:
@RequiresApi(api = Build.VERSION_CODES.O)
private void turnOnHotspot(){
WifiManager manager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
manager.startLocalOnlyHotspot(new WifiManager.LocalOnlyHotspotCallback(){
@Override
public void onStarted(WifiManager.LocalOnlyHotspotReservation reservation) {
super.onStarted(reservation);
Log.d(TAG, "Wifi Hotspot is on now");
}
@Override
public void onStopped() {
super.onStopped();
Log.d(TAG, "onStopped: ");
}
@Override
public void onFailed(int reason) {
super.onFailed(reason);
Log.d(TAG, "onFailed: ");
}
},new Handler());
}
Este fragmento de código crea un punto de acceso llamado algo como "AndroidShare_1234". Para un proyecto mío, necesito poder establecer una contraseña y un SSID en este punto de acceso, sin embargo no puedo encontrar la manera de hacerlo. Me gustaría crear un punto de acceso con un SSID como MyHotspot
y una contraseña personalizada.
Tenga en cuenta que setWifiApEnabled
ya no es compatible con Android O, así es como se hace en versiones anteriores de Android. Sin embargo, todavía necesito hacer un punto de acceso wifi con un SSID y una contraseña mediante programación. No puedo averiguar cómo hacer esto. ¡Gracias por adelantado!
A quien le importa ...:
Para un proyecto escolar, hice un casillero que se desbloquea cada vez que se puede conectar a una red inalámbrica con ciertos datos críticos, de ahí la necesidad de establecer un punto de acceso de manera programática.