ב-Android מגרסה 11 (SDK ברמה 30) ואילך, אפליקציות יכולות להיעזר בכוונה android.provider.Settings.ACTION_WIFI_ADD_NETWORKS
כדי להנחות את המשתמש איך להוסיף רשת שמורה אחת או יותר או הגדרות חדשות של Passpoint. ה-API פועל כפי שהוא כדי לשנות הגדרות שמורות קיימות.
כדי לשמור הגדרות של רשת או של Passpoint:
יוצרים כוונת רכישה מסוג
ACTION_WIFI_ADD_NETWORKS
.יוצרים הגדרה אחת או יותר באמצעות
WifiNetworkSuggestion.Builder
. שימו לב: למרות שמשתמשים ב-WifiNetworkSuggestion
, ה-Intent API הזה לא קשור ל-Offerion API.יוצרים רשימת מערך של ההגדרות שניתנות לחלוקה, ומצרפים אותה ל-intent באמצעות ה-extra
EXTRA_WIFI_NETWORK_LIST
.מריצים את הפקודה
Activity.startActivityForResult()
ומעבירים את הכוונה.ממתינים לתוצאה באמצעות הפונקציה החוזרת
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
}
}
}