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