Trên Android 11 (SDK cấp 30) trở lên, ứng dụng có thể sử dụng
android.provider.Settings.ACTION_WIFI_ADD_NETWORKS
ý định hướng dẫn người dùng thông qua việc 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 theo nguyên trạng để sửa đổi các mục đã 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
WifiNetworkSuggestion.Builder
. Hãy lưu ý rằng mặc dù bạn sử dụngWifiNetworkSuggestion
, nhưng API Ý định này vẫn không liên quan đến API Đề xuất.Tạo một danh sách mảng cấu hình theo gói và đính kèm danh sách đó vào với ý định
EXTRA_WIFI_NETWORK_LIST
khác.Thực hiện
Activity.startActivityForResult()
! truyền ý định.Nghe kết quả bằng cách sử dụng
Activity.onActivityResult()
.resultCode
có thể là một trong những trạng thái sau đây:Activity.RESULT_OK
: cho biết rằng người dùng đã chấp nhận các mạng được đề xuất và lưu các mạng đó.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 phương thứcEXTRA_WIFI_NETWORK_RESULT_LIST
chứa một dãy mã kết quả cho biết liệu người dùng cấu hình đã được lưu thành công. Sau đây là một số mã kết quả có thể xuất hiện:ADD_WIFI_RESULT_SUCCESS
: đã thêm hoặc cập nhật thành công cấu hình.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 định dạng không hợp lệ .ADD_WIFI_RESULT_ALREADY_EXISTS
: cấu hình được yêu cầu đã tồn tại nên không cần thực hiện hành động nào.
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 được lưu.
Mã mẫu
Mã mẫu sau đây cho biết cách lưu một 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
}
}
}