في نظام التشغيل Android 10 (مستوى واجهة برمجة التطبيقات 29) والإصدارات الأحدث، يمكنك استخدام واجهة برمجة تطبيقات جديدة من نظير إلى نظير
إعدادات "تمهيد التشغيل" للأجهزة الثانوية، مثل Chromecast وGoogle Home
الأجهزة. تتيح هذه الميزة لتطبيقك أن يطلب من المستخدم تغيير إذن الوصول.
التي يتصل بها الجهاز باستخدام
WifiNetworkSpecifier
لوصف خصائص الشبكة المطلوبة.
لاستخدام واجهة برمجة التطبيقات هذه، يمكنك إجراء ما يلي:
إنشاء محدد شبكة Wi-Fi باستخدام
WifiNetworkSpecifier.Builder
يمكنك ضبط فلتر للشبكة لمطابقة الشبكات المطلوب الاتصال بها، بالإضافة إلى بيانات الاعتماد.
اختَر مجموعة تضم
SSID
،SSID pattern
,BSSID
, وBSSID pattern
لضبط فلتر الشبكة في كل طلب، مع مراعاة ما يلي المتطلبات:- يجب أن يقدم كل طلب سمة واحدة على الأقل من
SSID
أوSSID pattern
أوBSSID
أوBSSID pattern
- يمكن لكل طلب ضبط سمة واحدة فقط من
SSID
أوSSID pattern
- يمكن لكل طلب ضبط سمة واحدة فقط من
BSSID
أوBSSID pattern
- يجب أن يقدم كل طلب سمة واحدة على الأقل من
أضف المحددات إلى طلب الشبكة مع
NetworkCallback
لتتبع حالة الطلب.إذا قبل المستخدم الطلب وكان الاتصال بالشبكة وناجح،
NetworkCallback.onAvailable()
على كائن الاستدعاء. وإذا رفض المستخدم الطلب أو إذا فشل الاتصال بالشبكة،NetworkCallback.onUnavailable()
على كائن الاستدعاء.
يؤدي بدء طلب الاتصال بجهاز نظير إلى تشغيل مربع حوار على الجهاز نفسه، الذي يمكن لمستخدم الجهاز قبول طلب الاتصال منه.
تجاوز موافقة المستخدم
بعد موافقة المستخدم على شبكة للاتصال بها استجابةً لطلب من تطبيقًا معيّنًا، يخزِّن الجهاز الموافقة على نقطة الوصول المحدّدة. إذا قدَّم التطبيق طلبًا محددًا الاتصال بنقطة الوصول هذه مرة أخرى، فسيتخطى الجهاز مرحلة موافقة المستخدم ويتصل تلقائيًا بالشبكة. إذا اختار المستخدم نسيان أثناء الاتصال بشبكة تطلبها واجهة برمجة التطبيقات، يتم تخزين ستتم إزالة الموافقة على هذه المجموعة من التطبيق والشبكة، كما ستتم إزالة أي طلب الموافقة الوارد من التطبيق من قِبل المستخدم مرة أخرى. إذا كان التطبيق طلبًا غير محدد، مثل استخدام نمط SSID أو BSSID، ثم يجب أن يوافق المستخدم على الطلب.
نموذج التعليمات البرمجية
يعرض نموذج الرموز التالي كيفية الاتصال بشبكة مفتوحة باستخدام SSID
بادئة "test"
ومعرّف مجموعة الخدمات الأساسية (BSSID) الخاص بـ "10:03:23"
:
Kotlin
val specifier = WifiNetworkSpecifier.Builder() .setSsidPattern(PatternMatcher("test", PatternMatcher.PATTERN_PREFIX)) .setBssidPattern(MacAddress.fromString("10:03:23:00:00:00"), MacAddress.fromString("ff:ff:ff:00:00:00")) .build() val request = NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .setNetworkSpecifier(specifier) .build() val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager val networkCallback = object : ConnectivityManager.NetworkCallback() { ... override fun onAvailable(network: Network?) { // do success processing here.. } override fun onUnavailable() { // do failure processing here.. } ... } connectivityManager.requestNetwork(request, networkCallback) ... // Release the request when done. connectivityManager.unregisterNetworkCallback(networkCallback)
Java
final NetworkSpecifier specifier = new WifiNetworkSpecifier.Builder() .setSsidPattern(new PatternMatcher("test", PatternMatcher.PATTERN_PREFIX)) .setBssidPattern(MacAddress.fromString("10:03:23:00:00:00"), MacAddress.fromString("ff:ff:ff:00:00:00")) .build(); final NetworkRequest request = new NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .setNetworkSpecifier(specifier) .build(); final ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); final NetworkCallback networkCallback = new NetworkCallback() { ... @Override void onAvailable(...) { // do success processing here.. } @Override void onUnavailable(...) { // do failure processing here.. } ... }; connectivityManager.requestNetwork(request, networkCallback); ... // Release the request when done. connectivityManager.unregisterNetworkCallback(networkCallback);