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