در Android 11 (سطح SDK 30) و بالاتر، برنامهها میتوانند از android.provider.Settings.ACTION_WIFI_ADD_NETWORKS
استفاده کنند تا کاربر را از طریق افزودن یک یا چند شبکه ذخیرهشده جدید یا پیکربندیهای Passpoint راهنمایی کنند. API همچنین برای اصلاح پیکربندیهای ذخیرهشده موجود، همانطور که هست کار میکند.
برای ذخیره یک شبکه یا پیکربندی Passpoint، موارد زیر را انجام دهید:
یک هدف
ACTION_WIFI_ADD_NETWORKS
ایجاد کنید.با استفاده از
WifiNetworkSuggestion.Builder
یک یا چند پیکربندی ایجاد کنید. توجه داشته باشید که حتی اگر ازWifiNetworkSuggestion
استفاده می کنید، این Intent API به Suggestion API مربوط نمی شود.یک لیست آرایه قابل تقسیم از پیکربندی ها ایجاد کنید و آن را با
EXTRA_WIFI_NETWORK_LIST
اضافی به intent وصل کنید.Activity.startActivityForResult()
اجرا کنید و در intent ارسال کنید.با استفاده از
Activity.onActivityResult()
به نتیجه گوش دهید.resultCode
می تواند یکی از موارد زیر باشد:-
Activity.RESULT_OK
: نشان می دهد که کاربر شبکه های پیشنهادی را پذیرفته و آنها را ذخیره کرده است. -
Activity.RESULT_CANCELED
: نشان می دهد که کاربر شبکه های پیشنهادی را رد کرده است.
اگر
resultCode
RESULT_OK
باشد، آنگاهIntent
داده حاویEXTRA_WIFI_NETWORK_RESULT_LIST
اضافی است که حاوی آرایه ای از کدهای نتیجه است که نشان می دهد آیا پیکربندی های فردی با موفقیت ذخیره شده اند یا خیر. کدهای نتایج ممکن عبارتند از:-
ADD_WIFI_RESULT_SUCCESS
: پیکربندی اضافه شده یا با موفقیت به روز شد. -
ADD_WIFI_RESULT_ADD_OR_UPDATE_FAILED
: هنگام تلاش برای افزودن پیکربندی، مانند به دلیل پیکربندی بد شکل، شکست. -
ADD_WIFI_RESULT_ALREADY_EXISTS
: پیکربندی درخواستی قبلاً وجود داشته است، بنابراین هیچ اقدامی لازم نیست.
-
اگر درخواست موفقیت آمیز باشد، پلتفرم اتصال به یکی از شبکه های تازه ذخیره شده را راه اندازی می کند.
نمونه کد
نمونه کد زیر نحوه ذخیره یک شبکه یا پیکربندی 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
}
}
}