على أجهزة Android 11 (حزمة SDK من المستوى 30) والإصدارات الأحدث، يمكن للتطبيقات استخدام
android.provider.Settings.ACTION_WIFI_ADD_NETWORKS
لإرشاد المستخدم خلال إضافة شبكة واحدة أو أكثر من الشبكات المحفوظة الجديدة أو
إعدادات Passpoint. تعمل واجهة برمجة التطبيقات أيضًا كما هي لتعديل الإعدادات المحفوظة الحالية.
لحفظ شبكة أو إعدادات Passpoint، اتّبِع الخطوات التالية:
أنشئ غرض
ACTION_WIFI_ADD_NETWORKS.أنشئ إعدادًا واحدًا أو أكثر باستخدام
WifiNetworkSuggestion.Builder. يُرجى العِلم أنّه على الرغم من استخدامWifiNetworkSuggestion، لا ترتبط واجهة برمجة التطبيقات هذه بـ واجهة برمجة تطبيقات الاقتراحات.أنشئ قائمة مصفوفة قابلة للتجزئة من الإعدادات وأرفِقها بالغرض باستخدام الإضافة.
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
}
}
}