В Android 11 (SDK уровня 30) и выше приложения могут использовать интент android.provider.Settings.ACTION_WIFI_ADD_NETWORKS
, чтобы помочь пользователю добавить одну или несколько новых сохранённых сетей или конфигураций точек доступа. API также работает «как есть» для изменения существующих сохранённых конфигураций.
Чтобы сохранить конфигурацию сети или точки доступа, выполните следующие действия:
Создайте намерение
ACTION_WIFI_ADD_NETWORKS
.Создайте одну или несколько конфигураций с помощью
WifiNetworkSuggestion.Builder
. Обратите внимание, что даже при использованииWifiNetworkSuggestion
этот API Intent не связан с API Suggestion .Создайте список массивов конфигураций и прикрепите его к намерению с помощью дополнения
EXTRA_WIFI_NETWORK_LIST
.Выполнить
Activity.startActivityForResult()
, передав намерение.Прослушивайте результат с помощью обратного вызова
Activity.onActivityResult()
.resultCode
может быть одним из следующих:-
Activity.RESULT_OK
: указывает на то, что пользователь принял предложенные сети и сохранил их. -
Activity.RESULT_CANCELED
: указывает на то, что пользователь отклонил предложенные сети.
Если
resultCode
равенRESULT_OK
, то объект dataIntent
содержит дополнительный элементEXTRA_WIFI_NETWORK_RESULT_LIST
, содержащий массив кодов результатов, указывающих, были ли отдельные конфигурации успешно сохранены. Возможные коды результатов:-
ADD_WIFI_RESULT_SUCCESS
: конфигурация добавлена или успешно обновлена. -
ADD_WIFI_RESULT_ADD_OR_UPDATE_FAILED
: сбой при попытке добавить конфигурацию, например, из-за неправильно сформированной конфигурации. -
ADD_WIFI_RESULT_ALREADY_EXISTS
: запрошенная конфигурация уже существовала, поэтому никаких действий не требовалось.
-
Если запрос выполнен успешно, платформа инициирует подключение к одной из новых сохраненных сетей.
Пример кода
В следующем примере кода показано, как сохранить конфигурацию сети или точки прохода.
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
}
}
}