En Android 11 (nivel de SDK 30) y versiones posteriores, las apps pueden usar la
android.provider.Settings.ACTION_WIFI_ADD_NETWORKS
de guiar al usuario para que agregue una o más nuevas redes guardadas o
Configuraciones de Passpoint. La API también funciona sin modificaciones para modificar
parámetros de configuración.
Para guardar una configuración de red o de Passpoint, haz lo siguiente:
Crea un intent
ACTION_WIFI_ADD_NETWORKS
.Crea uno o más parámetros de configuración con
WifiNetworkSuggestion.Builder
Ten en cuenta que, aunque usas unWifiNetworkSuggestion
, esta API de Intent no están relacionadas con la API de sugerencias.Crea una lista de arrays parcelable de las configuraciones y conéctala al con la
EXTRA_WIFI_NETWORK_LIST
adicionales.Ejecución
Activity.startActivityForResult()
: pasando el intent.Escucha el resultado con la tecla
Activity.onActivityResult()
devolución de llamada.El
resultCode
puede ser uno de los siguientes:Activity.RESULT_OK
: indicando que el usuario aceptó las redes propuestas y las guardó.Activity.RESULT_CANCELED
: indicando que el usuario rechazó las redes propuestas.
Si
resultCode
esRESULT_OK
, entonces los datosIntent
contienen lo siguiente:EXTRA_WIFI_NETWORK_RESULT_LIST
extra, que contiene un array de códigos de resultado que indica si una de configuración se guardaron correctamente. Los códigos de resultado posibles son los siguientes:ADD_WIFI_RESULT_SUCCESS
: configuración agregada o actualizada correctamente.ADD_WIFI_RESULT_ADD_OR_UPDATE_FAILED
: cuando se intenta agregar la configuración, por ejemplo, debido a un formato configuración.ADD_WIFI_RESULT_ALREADY_EXISTS
: Como ya existía la configuración solicitada, no era necesario realizar ninguna acción.
Si la solicitud tiene éxito, la plataforma activará una conexión con una de las redes guardadas recientemente.
Muestra de código
En la siguiente muestra de código, se indica cómo guardar una red o Passpoint configuración.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...
}
fun startOperation() {
val suggestions = ArrayList<WifiNetworkSuggestion>()
// WPA2 configuration
suggestions.add(
WifiNetworkSuggestion.Builder()
.setSsid("test111111")
.setWpa2Passphrase("test123456")
.build()
)
// Open configuration
suggestions.add(
WifiNetworkSuggestion.Builder()
.setSsid("test222222")
.build()
)
// Passpoint configuration
val config = PasspointConfiguration()
config.credential = Credential().apply {
realm = "realm.example.com"
simCredential = Credential.SimCredential().apply {
eapType = 18
imsi = "123456*"
}
}
config.homeSp = HomeSp().apply {
fqdn = "test1.example.com"
friendlyName = "Some Friendly Name"
}
suggestions.add(
WifiNetworkSuggestion.Builder()
.setPasspointConfig(config)
.build())
// Create intent
val bundle = Bundle()
bundle.putParcelableArrayList(EXTRA_WIFI_NETWORK_LIST, suggestions)
val intent = Intent(ACTION_WIFI_ADD_NETWORKS)
intent.putExtras(bundle)
// Launch intent
startActivityForResult(intent, 0)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if(resultCode == RESULT_OK) {
// user agreed to save configurations: still need to check individual results
if (data != null && data.hasExtra(EXTRA_WIFI_NETWORK_RESULT_LIST)) {
for (code in data.getIntegerArrayListExtra(EXTRA_WIFI_NETWORK_RESULT_LIST)) {
when (code) {
ADD_WIFI_RESULT_SUCCESS ->
... // Configuration saved or modified
ADD_WIFI_RESULT_ADD_OR_UPDATE_FAILED ->
... // Something went wrong - invalid configuration
ADD_WIFI_RESULT_ALREADY_EXISTS ->
... // Configuration existed (as-is) on device, nothing changed
else ->
... // Other errors
}
}
}
} else {
// User refused to save configurations
}
}
}