Trên Android 11 (SDK cấp 30) trở lên, các ứng dụng có thể sử dụng ý định android.provider.Settings.ACTION_WIFI_ADD_NETWORKS
để hướng dẫn người dùng cách thêm một hoặc nhiều mạng đã lưu mới hoặc cấu hình Passpoint. API này cũng hoạt động như bình thường để sửa đổi các cấu hình đã lưu hiện có.
Để lưu mạng hoặc cấu hình Passpoint, hãy làm như sau:
Tạo ý định
ACTION_WIFI_ADD_NETWORKS
.Tạo một hoặc nhiều cấu hình bằng cách sử dụng
WifiNetworkSuggestion.Builder
. Xin lưu ý rằng mặc dù bạn sử dụngWifiNetworkSuggestion
, nhưng API Ý định này không liên quan đến API Đề xuất.Tạo một danh sách mảng cấu hình có thể đóng gói và đính kèm danh sách đó vào ý định bằng phần bổ sung
EXTRA_WIFI_NETWORK_LIST
.Thực thi
Activity.startActivityForResult()
, truyền vào ý định.Theo dõi kết quả bằng lệnh gọi lại
Activity.onActivityResult()
.resultCode
có thể là một trong những loại sau:Activity.RESULT_OK
: cho biết người dùng đã chấp nhận và lưu các mạng được đề xuất.Activity.RESULT_CANCELED
: cho biết rằng người dùng đã từ chối các mạng được đề xuất.
Nếu
resultCode
làRESULT_OK
, thì dữ liệuIntent
sẽ chứa dữ liệu bổ sungEXTRA_WIFI_NETWORK_RESULT_LIST
. Dữ liệu này chứa một mảng mã kết quả cho biết liệu các cấu hình riêng lẻ đã được lưu thành công hay chưa. Các mã kết quả có thể xảy ra là:ADD_WIFI_RESULT_SUCCESS
: cấu hình đã được thêm hoặc cập nhật thành công.ADD_WIFI_RESULT_ADD_OR_UPDATE_FAILED
: lỗi khi cố gắng thêm cấu hình, chẳng hạn như do cấu hình được định dạng không đúng cách.ADD_WIFI_RESULT_ALREADY_EXISTS
: cấu hình được yêu cầu đã tồn tại nên bạn không cần làm gì cả.
Nếu yêu cầu thành công, nền tảng sẽ kích hoạt kết nối với một trong các mạng mới lưu.
Mã mẫu
Mã mẫu sau đây cho biết cách lưu cấu hình mạng hoặc 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
}
}
}