در اندروید ۱۱ (SDK سطح ۳۰) و بالاتر، برنامهها میتوانند از اینتنت 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: نشان میدهد که کاربر شبکههای پیشنهادی را رد کرده است.
اگر
resultCodeRESULT_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
}
}
}