يتيح نظام التشغيل Android 12 إمكانية استخدام شبكتَي Wi-Fi في الوقت نفسه، ما يسمح للأجهزة بالاتصال بشبكتَي Wi-Fi في الوقت نفسه. تتيح هذه الميزة الاختيارية الوظائف التالية.
- الاتصال قبل قطع الاتصال: يتصل الجهاز بشبكة Wi-Fi جديدة قبل قطع الاتصال الحالي. ويؤدي ذلك إلى انتقالات أكثر سلاسة عند التبديل بين شبكات Wi-Fi
- الاتصال المتزامن بالشبكة المحلية فقط والإنترنت: يتصل الجهاز بشبكة محلية فقط بدون مقاطعة الاتصال الأساسي الذي يوفّر الإنترنت للجهاز.
- الاتصال المتزامن بالشبكة المقيّدة والإنترنت: يتصل الجهاز بشبكة مقيّدة (متاحة فقط لتطبيقات معيّنة ذات امتيازات) بدون مقاطعة الاتصال الأساسي الذي يوفّر الإنترنت للجهاز.
- (الإصدار 13 من نظام التشغيل Android أو الإصدارات الأحدث) الشبكات المتزامنة المتعددة التي تتضمّن اتصالاً بالإنترنت: يتصل الجهاز بشبكتَين غير مقيّدتَين ومتاحتَين لجميع التطبيقات، وتوفّران اتصالاً بالإنترنت.
توضّح هذه الصفحة سلوك الجهاز عند تفعيل هذه الميزة وتفاصيل التنفيذ الخاصة بمصنّعي الأجهزة والمورّدين.
التنفيذ
يجب أن تتوافق الأجهزة مع ما يلي لتنفيذ التزامن بين STA وSTA في شبكة Wi-Fi:
يجب أن تتوافق شريحة Wi-Fi أو البرامج الثابتة مع اتصالَين متزامنين من نوع STA. يجب أن يتيح البرنامج الثابت جميع مجموعات القنوات والنطاقات لكلا النوعَين من الاتصالات. لتجنُّب مشاكل الأداء، ننصحك باستخدام شريحة Wi-Fi متوافقة مع نظام DBS 2x2+2x2.
يجب أن يتوافق الجهاز مع واجهات برمجة التطبيقات التالية في تنفيذ
IWifiChip
باستخدام AIDL أو HIDL.IWifiChip.setMultiStaPrimaryConnection(String ifName)
IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
يجب أن يتضمّن مزيج واجهات Wi-Fi في طبقة تجريد الأجهزة (HAL) واجهتَي STA متزامنتَين يتم عرضهما باستخدام تنسيق مواصفات مثل
[{STA} <= 2, ...]
. لمزيد من المعلومات، يُرجى الاطّلاع على التزامن المتعدد للواجهات في شبكة Wi-Fi.
في حال استيفاء المتطلبات الأساسية، يمكنك تنفيذ التزامن بين وضعَي Wi-Fi STA/STA باتّباع الخطوات التالية:
فعِّل دالة واحدة أو أكثر بشكل فردي باستخدام تراكبات موارد وقت التشغيل (تكون هذه الميزة غير مفعّلة تلقائيًا).
- Make-before-break:
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
- الاتصال المتزامن بالشبكة المحلية فقط والإنترنت:
config_wifiMultiStaLocalOnlyConcurrencyEnabled
- القيود المتزامنة والاتصال بالإنترنت:
config_wifiMultiStaRestrictedConcurrencyEnabled
- الشبكات المتزامنة المتعددة التي تتضمّن اتصالاً بالإنترنت:
config_wifiMultiStaMultiInternetConcurrencyEnabled
- Make-before-break:
تحقَّق من صحة كل عملية تنفيذ كما هو موضّح في الأقسام الخاصة بها.
لتحسين إمكانية استخدام Wi-Fi STA/STA بشكل متزامن، ننصح بأن تستخدم التطبيقات والأُطر المخصّصة من مصنّعي المعدات الأصلية الطريقة NetworkCallback#onCapabilitiesChanged()
بدلاً من WifiManager#getConnectionInfo()
التي تعرض WifiInfo
لشبكة واحدة فقط وتم إيقافها نهائيًا في Android 12. لمزيد من المعلومات، يُرجى الاطّلاع على واجهة برمجة التطبيقات Wi-Fi Network Request API للاتصال من جهاز إلى جهاز.
Make-before-break
تسمح وظيفة الاتصال قبل الفصل للأجهزة بالاتصال بشبكة Wi-Fi جديدة مع الحفاظ على اتصال شبكة Wi-Fi الحالية، ولا يتم الفصل عن الشبكة القديمة إلا بعد الاتصال بنجاح بشبكة Wi-Fi الجديدة والوصول إلى الإنترنت.
تعالج حالة الاستخدام "الاتصال قبل قطع الاتصال" المشاكل التالية في نظام التشغيل Android 11 والإصدارات الأقدم، حيث يجب أن يقطع الجهاز الاتصال بشبكة Wi-Fi الحالية قبل الاتصال بشبكة جديدة (قطع الاتصال قبل الاتصال).
عند الاتصال بشبكة جديدة، قد يكتشف الجهاز أنّ كلمة مرور Wi-Fi المحفوظة غير صحيحة أو أنّ الشبكة الجديدة لا تتيح الوصول إلى الإنترنت. ويؤدي ذلك إلى إجبار الجهاز على العودة إلى الشبكة القديمة، ما يؤدي إلى عدم توفّر اتصال Wi-Fi لفترة طويلة.
يتم قطع اتصال الشبكة القديمة بشكل مفاجئ، ما يعني إغلاق جميع مآخذ التوصيل. غالبًا ما تتأثر التطبيقات سلبًا بفقدان الاتصال المفاجئ، وقد يؤدي ذلك إلى عدم توفّر اتصال بالإنترنت للمستخدم لبضع ثوانٍ إلى أن يتم إنشاء الاتصال الجديد بالكامل.
تتغيّر الشبكة التلقائية مرّتين، من شبكة Wi-Fi القديمة إلى شبكة الجوّال، ثم من شبكة الجوّال إلى شبكة Wi-Fi الجديدة. ويؤدي ذلك إلى تفاعل التطبيقات مع تغييرات الشبكة مرتين. يجب أيضًا أن يقضي الجهاز فترة قصيرة من الوقت في استخدام بيانات شبكة الجوّال.
يتم استخدام مسار make-before-break فقط لعمليات التبديل التلقائي بين شبكات Wi-Fi التي يبدأها نظام التشغيل. تستخدِم عمليات تبديل الشبكة التي يبدأها المستخدمون مسار الإيقاف قبل التبديل القديم، حيث يتم قطع الاتصال بالشبكة السابقة بالكامل قبل الاتصال بالشبكة الجديدة. في بعض الحالات، يتم استخدام تسلسل break-before-make حتى في عمليات التبديل التلقائية التي يبدأها نظام التشغيل، على سبيل المثال، عند التبديل بين شبكتَين تم ضبط كلتيهما على استخدام عنوان MAC التلقائي.
يمكن للتطبيقات التحقّق مما إذا كانت حالة الاستخدام هذه متوافقة مع الجهاز باستخدام واجهة برمجة التطبيقات
WifiManager#isMakeBeforeBreakWifiSwitchingSupported()
.
التحقّق من صحة عملية "التوصيل قبل الفصل"
للتحقّق من صحة عملية التنفيذ، فعِّل التبديل التلقائي لشبكة Wi-Fi (عن طريق التأكّد من توفّر شبكة ذات قوة إشارة أعلى من الشبكة المتصلة) وتأكَّد من أنّ الجهاز يحافظ على الاتصال الحالي أثناء الاتصال بالشبكة الجديدة. لعرض حالة كلتا واجهتَي Wi-Fi والتأكّد من أنّهما متصلتان، استخدِم الأمر التالي.
adb shell wpa_cli -i wlan0 status ; echo ; adb shell wpa_cli -i wlan1 status
إذا لم تتوفّر إمكانية الاتصال بالشبكة الجديدة، سيحاول الجهاز الاتصال بها مع الحفاظ على الاتصال بالشبكة الحالية، وسيتوقف عن المحاولة عند رصد عدم توفّر إنترنت في الشبكة الجديدة. بعد ذلك، يواصل الجهاز استخدام الاتصال الحالي كشبكة Wi-Fi الأساسية.
الاتصال بالإنترنت والشبكة المحلية في الوقت نفسه
تتيح وظيفة الاتصال المتزامن بالشبكة المحلية فقط وبشبكة الإنترنت للأجهزة إمكانية الاتصال بشبكة محلية فقط، مثل الاتصال بجهاز إنترنت الأشياء، بشكل متزامن مع الشبكة الأساسية التي توفّر الإنترنت. تعمل هذه الوظيفة على تحسين تجربة المستخدم عند الاتصال مباشرةً بأجهزة إنترنت الأشياء، مثل الكاميرات، وهو أمر ممكن من خلال واجهة برمجة التطبيقات WifiNetworkSpecifier
التي تمت إضافتها في Android 10.
في الإصدار 11 من نظام التشغيل Android والإصدارات الأقدم، يتم قطع اتصال الأجهزة بشبكة Wi-Fi الأساسية عند الاتصال بجهاز إنترنت الأشياء، ما يؤدي إلى فقدان الاتصال بالإنترنت (إلا إذا كان الجهاز يتضمّن نوع نقل آخر متاحًا، مثل بيانات الجوّال).
يمكن للتطبيقات التحقّق مما إذا كانت هذه الوظيفة متاحة على الجهاز باستخدام واجهة برمجة التطبيقات
WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported()
.
لمزيد من المعلومات حول التغييرات التي أُجريت على وظيفة الاتصال المتزامن بالشبكة المحلية فقط والإنترنت في نظام التشغيل Android 12، يُرجى الاطّلاع على واجهة برمجة التطبيقات Wi-Fi Network Request API للاتصال من جهاز إلى جهاز.
التحقّق من الاتصال بالإنترنت والاتصال المحلي فقط
للتحقّق من صحة هذه الدالة، استخدِم اختبار MultiStaConcurrencyWifiNetworkSpecifierTest
في مجموعة أدوات اختبار التوافق (CTS).
الاتصال بالشبكة المقيدة والإنترنت في الوقت نفسه
تتيح وظيفة الاتصال المتزامن المحدود بالإنترنت للجهاز الاتصال بشكل متزامن بشبكة Wi-Fi أساسية للمستخدم وشبكة Wi-Fi محدودة لا تتوفّر إلا لتطبيقات محدّدة.
يمكن للتطبيقات التحقّق مما إذا كانت هذه الوظيفة متاحة على الجهاز باستخدام واجهة برمجة التطبيقات
WifiManager#isStaConcurrencyForRestrictedConnectionsSupported()
.
للسماح لجهاز بالاتصال بشبكات Wi-Fi ثانوية محظورة، اتّبِع الخطوات التالية:
أضِف اقتراحات شبكات Wi-Fi مع ضبط
setOemPaid
أوsetOemPrivate
على "صحيح".في
ConnectivityManager
، قدِّمNetworkRequest
باستخدام الإمكانات المناسبة:-
NET_CAPABILITY_OEM_PAID
لـsetOemPaid
-
NET_CAPABILITY_OEM_PRIVATE
لـsetOemPrivate
-
عندما يرصد الجهاز نتائج بحث تتضمّن شبكة تطابق اقتراح الشبكة المدفوعة أو الخاصة من الشركة المصنّعة الأصلية، يتصل بها تلقائيًا كشبكة ثانوية.
التحقّق من القيود المتزامنة واتصال الإنترنت
للتحقّق من صحة هذه الدالة، استخدِم اختبار MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
في مجموعة أدوات اختبار التوافق (CTS).
شبكات متعددة متزامنة مع اتصال بالإنترنت
تتيح ميزة الشبكات المتزامنة المتعددة مع الاتصال بالإنترنت، المتوفّرة على أجهزة Android 13 والإصدارات الأحدث، إمكانية توصيل الجهاز بشبكتَين (نقطتَي وصول) في الوقت نفسه، على أن تكون كلتا الشبكتَين غير مقيّدتَين (يمكن لجميع التطبيقات الوصول إليهما) وتتيحان الوصول إلى الإنترنت.
يمكن للتطبيقات التحقّق مما إذا كانت هذه الميزة متوافقة مع الجهاز باستخدام طريقة
WifiManager#isStaConcurrencyForMultiInternetSupported()
.
في حال توفّر الميزة، يمكن للتطبيقات ذات الامتيازات تفعيلها باستخدام الطريقة WifiManager#setStaConcurrencyForMultiInternetMode(int mode)
. تتضمّن هذه الميزة الأوضاع التالية:
WifiManager#WIFI_MULTI_INTERNET_MODE_DBS_AP
: يقتصر الربط المزدوج على النطاقات المزدوجة لنقطة وصول DBS.WifiManager#WIFI_MULTI_INTERNET_MODE_MULTI_AP
: يتيح هذا الخيار الاتصال بنقاط وصول عشوائية تستخدم نطاقات مختلفة.-
WifiManager#WIFI_MULTI_INTERNET_MODE_DISABLED
: يؤدي إلى إيقاف الميزة.
لطلب البحث عن وضع الميزة النشط حاليًا، استخدِم طريقة
WifiManager#getStaConcurrencyForMultiInternetMode()
.
عندما تكون الميزة مفعّلة، اتّبِع الخطوات التالية لطلب شبكة Wi-Fi إضافية توفّر خدمة الإنترنت.
أنشئ معرّفًا لشبكة Wi-Fi باستخدام
WifiNetworkSpecifier.Builder
. اختَر نطاقًا للمحدّد باستخدام طريقةsetBand()
. لا تحدِّد معرّف SSID أو BSSID كشبكة إضافية لأنّ إطار عمل Wi-Fi يختار الشبكة المحدّدة للنطاق المحدّد.باستخدام
ConnectivityManager
، أنشئNetworkRequest
مع إمكانيةNET_CAPABILITY_INTERNET
.أضِف المحدّد إلى طلب الشبكة مع مثيل
NetworkCallback
لتتبُّع حالة الطلب، وأرسِل الطلب إلىConnectivityManager
. إذا كانت شبكة محفوظة تتضمّن النطاق المطلوب متوفّرة في نتيجة الفحص، وتم الاتصال بالشبكة بنجاح، سيتم استدعاءNetworkCallback.onAvailable()
في عنصر معاودة الاتصال.
التحقّق من صحة شبكات متعددة متزامنة مع اتصال بالإنترنت
للتحقّق من صحة هذه الدالة، استخدِم اختبار CTS التالي:
- CTS:
MultiStaConcurrencyMultiInternetWifiNetworkTest
إرشادات حول شريحة Wi-Fi الخاصة بالمورِّد
بالنسبة إلى مورّدي شرائح Wi-Fi، اتّبِع الإرشادات التالية لتوفير إمكانية التشغيل المتزامن لشبكتَي Wi-Fi STA/STA.
يجب أن تتوافق شريحة Wi-Fi مع اتصالات STA المتزامنة المزدوجة. وهذا يعني أنّه يتوافق مع ما يلي:
- تحتوي كل واجهة STA على عنوان MAC فريد يمكن للبرنامج إعداده.
- يمكن إنشاء واجهة STA الثانوية وإيقافها بشكل ديناميكي.
- يمكن ربط كل محطة طرفية لاسلكية بمعرّف SSID مختلف (إما ضمن النطاق نفسه أو نطاق مختلف).
- يمكن ربط كل محطة STA بمعرّف SSID نفسه (إما ضمن النطاق نفسه أو نطاق مختلف). يجب ألا يكون جهازا STA متصلَين بمعرّف BSSID نفسه.
يجب أن تعمل الميزات المهمة على أساس كل واجهة على حدة، ويجب أن تكون متاحة على الواجهة الأساسية. في ما يلي قائمة بهذه الميزات المهمة:
يجب أن يكون التجوال متاحًا على الواجهة الأساسية على الأقل (يتم ضبطها باستخدام
IWifiChip.setMultiStaPrimaryConnection()
). وإذا كان التجوال متاحًا على كلتا الواجهتين، يجب ألا تتعارض القرارات بشأن أحد الاتصالات مع الاتصال المتزامن الثاني. على سبيل المثال، يجب ألا تتجوّل إحدى الواجهات إلى BSSID الخاص بالاتصال الآخر.يجب أن تتوافق ميزة APF (وغيرها من عمليات التفريغ، مثل ARP وNS) مع الواجهة الأساسية على الأقل (يتم ضبطها باستخدام
IWifiChip.setMultiStaPrimaryConnection()
).يجب أن تعمل إحصاءات طبقة الربط على أساس كل واجهة.
في ما يلي آليات التنفيذ المقترَحة لشرائح Wi-Fi في سيناريوهات التزامن المختلفة:
يجب أن تسمح شريحة Wi-Fi للإطار باستدعاء
IWifiChip.setMultiStaUseCase()
باستخدام أحد الثوابت التالية لتحديد الدالة الحالية:-
DUAL_STA_TRANSIENT_PREFER_PRIMARY
: تحدّد وظيفة Make-Before-Break. يجب إعطاء الأولوية لجودة الاتصال الأساسي على جودة الاتصال الثانوي. -
DUAL_STA_NON_TRANSIENT_UNBIASED
: تحدّد هذه السمة وظيفة الاتصال المتزامن بالإنترنت والشبكة المحلية فقط أو وظيفة الاتصال المتزامن بالإنترنت والشبكة المقيدة. يجب أن تكون جودة الاتصالين متساوية الأولوية.
-
بما أنّ عمليات نقل البيانات المتزامنة المزدوجة يمكن أن تؤدي إلى أوضاع تشغيل MCC وSCC وDBS، يجب أن يختار المورّد أفضل إعدادات الراديو عندما يستدعي إطار العمل
IWifiChip.setMultiStaUseCase()
للإشارة إلى الوظيفة. في ما يلي إرشادات عامة:- يُفضَّل استخدام نظام 2x2+2x2 DBS إذا كان متاحًا.
- تجنَّب استخدام 1x1+1x1 DBS إذا أمكن ذلك بسبب التأثير المفرط في جودة الاتصال. بدلاً من ذلك، ننصحك باستخدام مركز عملائي (MCC).
- يجب أن يكون دورة التشغيل في "مركز التحكّم" قابلاً للضبط من خلال برنامج التشغيل أو البرامج الثابتة لمختلف الوظائف. لا يضبط إطار العمل دورة التشغيل الخاصة بـ MCC بشكل مباشر، بل يستعلم عن هذه المعلومات باستخدام
StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent
. في حال استخدام MCC، ننصحك باتّباع دورات التشغيل التالية بين الاتصالات الأساسية والثانوية:
-
DUAL_STA_TRANSIENT_PREFER_PRIMARY
: %70 أساسي، %30 ثانوي -
DUAL_STA_NON_TRANSIENT_UNBIASED
: %50 أساسي، %50 ثانوي
-