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 tal como está para modificar las configuraciones existentes que se guardaron.
Para guardar una red o una configuración 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 parcelables de las configuraciones y adjúntalo al intent con el elemento adicional
EXTRA_WIFI_NETWORK_LIST
.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
, los datosIntent
contienen el elemento adicionalEXTRA_WIFI_NETWORK_RESULT_LIST
, que contiene un array de códigos de resultado que indican si se guardaron correctamente las configuraciones individuales. Los posibles códigos de resultado son los siguientes:ADD_WIFI_RESULT_SUCCESS
: Se agregó o actualizó correctamente la configuración.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 muestra cómo guardar una configuración de red o de Passpoint.
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
}
}
}