يتيح Android للتطبيقات إمكانية التعرّف على التغييرات الديناميكية في الاتصال. يمكنك استخدام الفئات التالية لتتبع تغييرات الاتصال والاستجابة لها:
ConnectivityManager
يخبر التطبيق بحالة الاتصال في النظام.- تمثل الفئة
Network
إحدى الفئات الشبكات التي يتصل بها الجهاز. يمكنك استخدامNetwork
. كمفتاح لجمع معلومات عن الشبكة باستخدامConnectivityManager
أو لربط المقابس على الشبكة. عندما تعمل الشبكة انقطاع الاتصال، سيتوقّف العنصرNetwork
عن الاستخدام. حتى إذا كان الجهاز لاحقًا يعيد الاتصال بالجهاز نفسه، ويمثل كائنNetwork
جديد شبكة جديدة. - الكائن
LinkProperties
يحتوي على معلومات حول رابط إحدى الشبكات، مثل قائمة نظام أسماء النطاقات الخوادم وعناوين IP المحلية ومسارات الشبكة المثبتة على الشبكة. NetworkCapabilities
يحتوي هذا العنصر على معلومات حول خصائص الشبكة، مثل وسائل النقل (Wi-Fi والجهاز الجوّال والبلوتوث) والبيانات التي تستطيع الشبكة استخدامها. على سبيل المثال، يمكنك الاستعلام عن الكائن لتحديد ما إذا كانت الشبكة قادر على إرسال رسائل وسائط متعددة أو كان خلف مدخل مقيد الوصول أو يفرض تكلفة إضافية.
يمكن للتطبيقات المهتمة بحالة الاتصال الفورية في أي وقت
طلب ConnectivityManager
طرق لمعرفة نوع الشبكة
المتوفرة. هذه الطرق مفيدة لتصحيح الأخطاء ومراجعة
لقطة عن الاتصال المتاحة في أي وقت.
ومع ذلك، فإن البيانات
لا تُعلِم ConnectivityManager
طريقة تطبيقك بأيّ إجراء.
بعد المكالمة، حتى لا يسمحوا لك بتحديث واجهة المستخدم. لا يمكنه أيضًا تعديل التطبيق
اعتمادًا على انقطاع الاتصال بالشبكة أو عندما تتوفر إمكانات الشبكة
التغيير.
يمكن أن تتغير إمكانية الاتصال في أي وقت، وتحتاج معظم التطبيقات إلى
عرض حديث ومحدّث دائمًا لحالة الاتصال بالشبكات على الجهاز. يمكن للتطبيقات
تسجيل معاودة الاتصال مع ConnectivityManager
ليتم تنبيهك إلى التغييرات التي
التطبيق المعني. باستخدام معاودة الاتصال، يمكن لتطبيقك التفاعل على الفور مع أي
تغيير ذي صلة في الاتصال، دون الحاجة إلى اللجوء إلى إجراء استطلاعات مكلفة
التي قد تفوت التحديثات السريعة.
إن استخدام NetworkCallback
وطرق أخرى للتعرّف على
لا تتطلب حالة اتصال الجهاز أي إذن محدّد.
ومع ذلك، تخضع بعض الشبكات لأذونات محدّدة.
بالنسبة
على سبيل المثال، قد تكون هناك شبكات محظورة غير متاحة للتطبيقات. الارتباط بـ
تتطلب الشبكة التي تعمل في الخلفية الحصول على إذن CHANGE_NETWORK_STATE
. وبعض
قد يحتاج تشغيل المكالمات إلى أذونات محددة. ارجع إلى المحدد
وثائق لكل مكالمة للحصول على التفاصيل.
الحصول على حالة فورية
يمكن لجهاز Android الذي يعمل بنظام التشغيل Android الاحتفاظ بالعديد من الاتصالات في الوقت نفسه.
للحصول على معلومات حول حالة الشبكة الحالية، عليك أولاً الحصول على
مثال على ConnectivityManager
:
Kotlin
val connectivityManager = getSystemService(ConnectivityManager::class.java)
Java
ConnectivityManager connectivityManager = getSystemService(ConnectivityManager.class);
بعد ذلك، استخدِم هذا المثيل للحصول على إشارة إلى الشبكة التلقائية الحالية التطبيق:
Kotlin
val currentNetwork = connectivityManager.getActiveNetwork()
Java
Network currentNetwork = connectivityManager.getActiveNetwork();
في ما يتعلّق بشبكة معيّنة، يمكن لتطبيقك طلب الحصول على معلومات عنها:
Kotlin
val caps = connectivityManager.getNetworkCapabilities(currentNetwork) val linkProperties = connectivityManager.getLinkProperties(currentNetwork)
Java
NetworkCapabilities caps = connectivityManager.getNetworkCapabilities(currentNetwork); LinkProperties linkProperties = connectivityManager.getLinkProperties(currentNetwork);
للحصول على وظائف أكثر فائدة، يمكنك تسجيل
NetworkCallback
لمزيد من المعلومات حول تسجيل عمليات معاودة الاتصال بالشبكة، اطلع على
الاستماع إلى أحداث الشبكة
إمكانات الشبكة وخصائص الارتباط
يوفّر العنصران NetworkCapabilities
وLinkProperties
معلومات عن
كافة السمات التي يعرفها النظام عن الشبكة.
LinkProperties
يعرف الكائن بالمسارات وعناوين الروابط واسم الواجهة ومعلومات الخادم الوكيل (إذا كان
أي نظام أساسي)، وخوادم نظام أسماء النطاقات. يجب استدعاء الطريقة ذات الصلة في الكائن LinkProperties
.
لاسترداد المعلومات التي تحتاجها.
الكائن NetworkCapabilities
يتضمّن معلومات عن عمليات النقل بالشبكة وإمكاناتها.
النقل هو تجريد لوسيلة مادية تعتمد شبكة عليها
العمل. من الأمثلة الشائعة على وسائل النقل هي Ethernet وWi-Fi والجهاز الجوّال.
يمكن أن تكون الشبكات الافتراضية الخاصة وشبكات Wi-Fi من الند للند وسائل نقل أيضًا.
على نظام Android، يمكن أن تتضمن الشبكة عدة وسائل نقل في الوقت نفسه. مثال
منها شبكة VPN تعمل عبر كل من Wi-Fi وشبكات الجوّال. تمتلك شبكة VPN
عمليات النقل عبر شبكة Wi-Fi والأجهزة الجوّالة وشبكة VPN. لمعرفة ما إذا كان
شبكة لها نقل معين، استخدم
NetworkCapabilities.hasTransport(int)
باستخدام أحد ثوابت NetworkCapabilities.TRANSPORT_*
.
تصف القدرة ملكية الشبكة. تتضمن أمثلة الإمكانات
"MMS
" وNOT_METERED
" و"INTERNET
" يمكن لأي شبكة تتضمن إمكانية إرسال رسائل MMS أن ترسل
وتلقّي رسائل من "خدمة مراسلة الوسائط المتعددة" والشبكة بدون
لا تستطيع إمكاناتها. لا تُصدر الشبكة التي تتوافق مع إمكانية NOT_METERED
فاتورة بقيمة
المستخدم للبيانات. يمكن لتطبيقك التحقّق من الإمكانات المناسبة باستخدام
NetworkCapabilities.hasCapability(int)
باستخدام أحد ثوابت NetworkCapabilities.NET_CAPABILITY_*
.
تتضمّن ثوابت NET_CAPABILITY_*
الأكثر فائدة ما يلي:
NET_CAPABILITY_INTERNET
: يشير إلى إعداد الشبكة من الوصول إلى الإنترنت. هذا الأمر يتعلق بالإعداد وليس فعليًا القدرة على الوصول إلى الخوادم العامة. على سبيل المثال، يمكن إعداد الشبكة الوصول إلى الإنترنت ولكنهم يخضعون لبوابة مقيدة.عادةً ما توفّر شبكة الجوّال لمشغّل شبكة الجوّال الإمكانية
INTERNET
، في حين أنّ وفي العادة، لا تكون شبكة Wi-Fi المحلية من نظير لنظير (P2P) كذلك. للتعرف على الاتصال الفعلي، راجعNET_CAPABILITY_VALIDATED
NET_CAPABILITY_NOT_METERED
: يشير إلى أن الشبكة لا تفرض تكلفة استخدام. الشبكة هي مصنّفة على أنّها خاضعة للقياس عندما يكون المستخدم حسّاسًا للاستخدام المكثف للبيانات الاتصال بسبب التكاليف المالية أو قيود البيانات أو أداء البطارية المشكلات.NET_CAPABILITY_NOT_VPN
: يشير إلى أن الشبكة ليست شبكة افتراضية خاصة.NET_CAPABILITY_VALIDATED
: إلى أن الشبكة توفر وصولاً فعليًا إلى الإنترنت العام عند فحصه. يشير هذا المصطلح إلى شبكة خلف شخص محظور. لا تحتوي البوابة أو الشبكة التي لا توفر تحليل اسم النطاق هذه الإمكانية. هذا هو أقرب ما يمكن أن يخبره النظام عن الشبكة في الواقع، على الرغم من أن الشبكة التي تم التحقق من صحتها لا تزال قادرة على من حيث المبدأ، خاضعة للتصفية المستندة إلى بروتوكول الإنترنت أو تعاني من خسائر مفاجئة في الاتصال بسبب مشاكل مثل ضعف الإشارة.NET_CAPABILITY_CAPTIVE_PORTAL
: إلى أن الشبكة تتضمن مدخلاً مشروطًا عند إجراء فحص لها.
هناك إمكانات أخرى قد تهتم بها التطبيقات الأكثر تخصّصًا.
لمزيد من المعلومات، اطّلع على تعريفات المَعلمات في
NetworkCapabilities.hasCapability(int)
قد تتغير إمكانات الشبكة في أي وقت. وعندما يكتشف النظام
مدخل مقيد الوصول، يعرض إشعارًا يدعو المستخدم إلى تسجيل الدخول. في حين أن هذا
مستمرة، وتحتوي الشبكة على NET_CAPABILITY_INTERNET
إمكانات NET_CAPABILITY_CAPTIVE_PORTAL
ولكن ليس
الميزة NET_CAPABILITY_VALIDATED
.
عندما يتخذ المستخدم إجراءً ويسجل الدخول إلى
صفحة البوابة المشروطة، يصبح بإمكان الجهاز الوصول إلى الإنترنت المتاح للجميع
وبذلك تحصل الشبكة على إمكانية NET_CAPABILITY_VALIDATED
وتفقد
الميزة NET_CAPABILITY_CAPTIVE_PORTAL
.
وبالمثل، يمكن أن تتغيّر عمليات نقل الشبكة ديناميكيًا.
على سبيل المثال، يمكن لشبكة VPN إعادة ضبط نفسها لاستخدام
شبكة أسرع ظهرت للتو، مثل التبديل من الهاتف المحمول إلى Wi-Fi
شبكتها الأساسية. في هذه الحالة، تفقد الشبكة TRANSPORT_CELLULAR
.
النقل والحصول على وسيلة النقل TRANSPORT_WIFI
، مع الحفاظ على
نقل لمدة TRANSPORT_VPN
.
الاستماع إلى أحداث الشبكة
للتعرّف على أحداث الشبكة، استخدِم
NetworkCallback
الفصل الدراسي مع
ConnectivityManager.registerDefaultNetworkCallback(NetworkCallback)
أو
ConnectivityManager.registerNetworkCallback(NetworkCallback)
هاتان الطريقتان تخدمان أهدافًا مختلفة
الأهداف.
تحتوي جميع تطبيقات Android على شبكة تلقائية يحدّدها النظام. يفضّل النظام عادةً الشبكات التي لا تفرض تكلفة استخدام تلك التي تفرض تكلفة استخدام وشبكات أسرع إلى شبكات أبطأ.
عندما يصدر أحد التطبيقات طلب شبكة، كما هو الحال مع
HttpsURLConnection
،
تلبية النظام لهذا الطلب باستخدام الشبكة الافتراضية. السماح للتطبيقات بإرسال زيارات
على شبكات أخرى أيضًا. لمزيد من المعلومات، يمكنك الاطلاع على القسم حول الملفات الإضافية
.
يمكن أن تتغير الشبكة التي يتم تعيينها كشبكة افتراضية في أي وقت أثناء عمر التطبيق. ومن الأمثلة النموذجية على ذلك الجهاز الذي يأتي ضمن نطاق نقطة وصول Wi-Fi معروفة ونشطة وبدون تكلفة وأسرع من الأجهزة الجوّالة. تشير رسالة الأشكال البيانية جهاز بنقطة الوصول هذه وتبديل الشبكة الافتراضية لجميع التطبيقات إلى شبكة Wi-Fi الجديدة.
عندما تصبح الشبكة الجديدة هي الشبكة التلقائية، يستخدمها أي اتصال جديد يفتحه التطبيق. هذه الشبكة. في مرحلة ما بعد ذلك، ستتغير جميع عمليات الربط المتبقية في إنهاء نهائي للشبكة الافتراضية بشكل كامل. إذا كان من المهم بالنسبة إلى التطبيق عندما تتغير الشبكة الافتراضية، فإنها تُسجل شبكة افتراضية على النحو التالي:
Kotlin
connectivityManager.registerDefaultNetworkCallback(object : ConnectivityManager.NetworkCallback() { override fun onAvailable(network : Network) { Log.e(TAG, "The default network is now: " + network) } override fun onLost(network : Network) { Log.e(TAG, "The application no longer has a default network. The last default network was " + network) } override fun onCapabilitiesChanged(network : Network, networkCapabilities : NetworkCapabilities) { Log.e(TAG, "The default network changed capabilities: " + networkCapabilities) } override fun onLinkPropertiesChanged(network : Network, linkProperties : LinkProperties) { Log.e(TAG, "The default network changed link properties: " + linkProperties) } })
Java
connectivityManager.registerDefaultNetworkCallback(new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(Network network) { Log.e(TAG, "The default network is now: " + network); } @Override public void onLost(Network network) { Log.e(TAG, "The application no longer has a default network. The last default network was " + network); } @Override public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) { Log.e(TAG, "The default network changed capabilities: " + networkCapabilities); } @Override public void onLinkPropertiesChanged(Network network, LinkProperties linkProperties) { Log.e(TAG, "The default network changed link properties: " + linkProperties); } });
عندما تصبح الشبكة الجديدة هي الشبكة التلقائية، يتلقّى التطبيق مكالمة
onAvailable(Network)
للشبكة الجديدة. التنفيذ
onCapabilitiesChanged(Network,NetworkCapabilities)
،
onLinkPropertiesChanged(Network,LinkProperties)
,
أو كليهما للتفاعل بشكل مناسب مع التغييرات في الاتصال.
بالنسبة إلى معاودة الاتصال المسجَّلة لدى "registerDefaultNetworkCallback()
"، onLost()
يعني أن الشبكة قد فقدت حالة كونها الشبكة الافتراضية. قد يكون الجهاز غير متصل.
على الرغم من أنه يمكنك التعرف على وسائل النقل التي تستخدمها الشبكة الافتراضية من خلال
الاستعلام
NetworkCapabilities.hasTransport(int)
،
يعد ذلك وكيلاً ضعيفًا للنطاق الترددي أو الحد الأقصى لاستخدام الشبكة. تطبيقك
افتراض أن شبكة Wi-Fi لا تفرض دائمًا حدود استخدام، وتوفر دائمًا نطاقًا تردديًا أفضل
من الجوّال.
بدلاً من ذلك، استخدِم
NetworkCapabilities.getLinkDownstreamBandwidthKbps()
لقياس النطاق الترددي،
NetworkCapabilites.hasCapability(int)
مع
NET_CAPABILITY_NOT_METERED
الحجج لتحديد قابلية القياس. لمزيد من المعلومات، يمكنك الاطلاع على القسم حول
NetworkCapabilities وLinkProperties
بشكل افتراضي، يتم استدعاء طرق معاودة الاتصال في سلسلة اتصال الاتصال
تطبيقك، وهي سلسلة محادثات منفصلة تستخدمها ConnectivityManager
. إذا كان
أي عمل مطلوب من تنفيذ عمليات الاستدعاء، اتصل به
فصل العمال باستخدام المتغير
ConnectivityManager.registerDefaultNetworkCallback(NetworkCallback, Handler)
يمكنك إلغاء تسجيل معاودة الاتصال عند عدم استخدامها بعد ذلك عن طريق الاتصال
ConnectivityManager.unregisterNetworkCallback(NetworkCallback)
نشاطك الرئيسي onPause()
مكانًا جيدًا للقيام بذلك، خاصةً إذا قمت بتسجيل رد الاتصال في
onResume()
شبكات إضافية
وعلى الرغم من أن الشبكة الافتراضية هي الشبكة الوحيدة ذات الصلة بمعظم التطبيقات، إلا أن بعض
تطبيقات
قد تهتم بالشبكات الأخرى المتاحة. لمعرفة المزيد حول هذه، التطبيقات
إنشاء NetworkRequest
يطابق
الاتصال وإجراء المكالمات
ConnectivityManager.registerNetworkCallback(NetworkRequest, NetworkCallback)
تتشابه هذه العملية مع الاستماع
إلى شبكة افتراضية. ومع ذلك، على الرغم من أنه قد لا يكون هناك
شبكة افتراضية تنطبق على تطبيق في أي وقت، فإن هذا الإصدار يتيح
جميع الشبكات المتاحة في الوقت نفسه، بحيث يمكن
onLost(Network)
يعني أن الشبكة قد انقطع اتصالها نهائيًا، وليس أنّ هذا ليس هو الشبكة
بعد الآن.
ينشئ التطبيق NetworkRequest
لإعلام ConnectivityManager
بنوع النشاط.
للشبكات التي ترغب في الاستماع إليها يوضح المثال التالي كيفية إنشاء
NetworkRequest
لتطبيق مهتم فقط بالإنترنت الذي لا تفرض تكلفة استخدام
الاتصالات:
Kotlin
val request = NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED) .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .build() connectivityManager.registerNetworkCallback(request, myNetworkCallback)
Java
NetworkRequest request = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED) .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .build(); connectivityManager.registerNetworkCallback(request, myNetworkCallback);
يعني ذلك أنّ تطبيقك يسمع عن جميع التغييرات المتعلّقة بأي إعدادات لا تفرض تكلفة استخدام. الشبكة على النظام.
أما بالنسبة لمعاودة الاتصال بالشبكة الافتراضية، فهناك إصدار من
registerNetworkCallback(NetworkRequest, NetworkCallback, Handler)
تقبل Handler
حتى لا يتم تحميل سلسلة Connectivity
من
التطبيق.
اتصل
ConnectivityManager.unregisterNetworkCallback(NetworkCallback)
عندما لا تكون معاودة الاتصال مناسبة بعد الآن. يمكن للتطبيق التسجيل بالتزامن
عدة استدعاءات للشبكة.
للتيسير عليك،
يحتوي الكائن NetworkRequest
على
الإمكانات المشتركة التي تحتاجها معظم التطبيقات، بما في ذلك:
عند كتابة تطبيقك، تحقق من الإعدادات الافتراضية لمعرفة ما إذا كانت تتطابق مع تطبيقك حالة الاستخدام، ومحوها إذا كنت تريد أن يتم إشعار تطبيقك بالشبكات التي لا تملك هذه الإمكانات. من ناحية أخرى، أضف والإمكانيات التي من شأنها تجنب طلب أي تغيير في الاتصال في الشبكات التي التي لا يتفاعل معها تطبيقك.
على سبيل المثال، إذا كان التطبيق يحتاج إلى إرسال رسائل وسائط متعددة، يمكنك إضافة
NET_CAPABILITY_MMS
إلى NetworkRequest
لتجنُّب إخبارهم بجميع الشبكات التي لا يمكنها
إرسال رسائل وسائط متعددة إضافة
TRANSPORT_WIFI_AWARE
إذا كان تطبيقك مهتمًا فقط باتصال Wi-Fi من خلال P2P.
NET_CAPABILITY_INTERNET
و
NET_CAPABILITY_VALIDATED
يمكنك الاستفادة منها إذا كنت مهتمًا بإمكانية نقل البيانات إلى خادم.
على الإنترنت.
نموذج تسلسل معاودة الاتصال
يصف هذا القسم تسلسل عمليات معاودة الاتصال التي قد يتلقّاها التطبيق في حال تسجِّل كلاً من معاودة الاتصال الافتراضية ومعاودة الاتصال العادية على جهاز به اتصال بشبكة الهاتف المحمول. في هذا المثال، يتصل الجهاز نقطة وصول جيدة إلى Wi-Fi، ثم ينقطع الاتصال بها. يفترض المثال أيضًا أن تفعيل الإعداد بيانات الجوّال قيد التشغيل دائمًا في جهازك.
يكون الجدول الزمني على النحو التالي:
عندما يتصل التطبيق بـ
registerNetworkCallback()
، يتم معاودة الاتصال فورًا تلقّي مكالمات من "onAvailable()
" و"onNetworkCapabilitiesChanged()
" وonLinkPropertiesChanged()
لشبكة الجوال، لأنه فقط شبكة متاحة. في حال توفُّر شبكة أخرى، سيعرض التطبيق أيضًا مع استدعاءات الشبكة الأخرى.
الشكل 1. حالة التطبيق بعد الاتصال بـregisterNetworkCallback()
.بعد ذلك، يطلب التطبيق من "
registerDefaultNetworkCallback()
". الشبكة التلقائية تبدأ معاودة الاتصال في تلقّي المكالمات على الرقمonAvailable()
،onNetworkCapabilitiesChanged()
وonLinkPropertiesChanged()
شبكة الجوّال، لأن شبكة الجوّال هي الشبكة الافتراضية. في حال حذف تعمل شبكة أخرى غير تلقائية، لا يمكن للتطبيق تلقّي الاتصالات بالشبكة غير الافتراضية.
الشكل 2. حالة التطبيق بعد تسجيل شبكة تلقائيةويتصل الجهاز لاحقًا بشبكة Wi-Fi (لا تفرض تكلفة استخدام). الخط العادي مع معاودة الاتصال بالشبكة على
onAvailable()
،onNetworkCapabilitiesChanged()
وonLinkPropertiesChanged()
شبكة Wi-Fi.
الشكل 3. حالة التطبيق بعد الاتصال بشبكة Wi-Fi لا تفرض تكلفة استخدامفي هذه المرحلة، من الممكن أن يستغرق التحقق من شبكة Wi-Fi بعض الوقت. ضِمن في هذه الحالة، يستدعي
onNetworkCapabilitiesChanged()
الشبكة العادية لا تشتمل معاودة الاتصال على الإمكانيةNET_CAPABILITY_VALIDATED
. بعد في وقت قصير، يتلقى اتصالاً هاتفيًا بـonNetworkCapabilitiesChanged()
، حيث تشمل الإمكانات الجديدةNET_CAPABILITY_VALIDATED
. في معظم الحالات، يكون التحقق من الصحة سريعًا جدًا.عندما يتم التحقق من صحة شبكة Wi-Fi، يفضل النظام ذلك على شبكة الجوّال. لأن الشبكة لا تفرض تكلفة استخدام. تصبح شبكة Wi-Fi هي شبكة افتراضية، لذلك يتلقى رد الاتصال بالشبكة الافتراضي اتصالاً
onAvailable()
وonNetworkCapabilitiesChanged()
وonLinkPropertiesChanged()
لشبكة Wi-Fi. بدأت شبكة الجوّال إلى الخلفية، ويتلقى المعيد العادي للشبكة اتصالاًonLosing()
لشبكة الجوّال.ولأن هذا المثال يفترض أن تكون بيانات الجوّال قيد التشغيل دائمًا على هذا الجهاز، فإن عدم انقطاع شبكة الجوال مطلقًا. إذا تم إيقاف الإعداد، فبعد أثناء انقطاع اتصال شبكة الجوّال، وعند معاودة الاتصال بالشبكة العادية مكالمة مع
onLost()
الشكل 4. حالة التطبيق بعد التحقُّق من شبكة Wi-Fi.بعد ذلك، انقطع اتصال الجهاز بشبكة Wi-Fi فجأة بسبب انقطاع الاتصال بينهما. النطاق. نظرًا لقطع اتصال Wi-Fi، ستتم إعادة الاتصال بالشبكة العادية يتلقّى يمكنك الاتصال برقم
onLost()
للاتصال بشبكة Wi-Fi. ولأن الهاتف المحمول هو الشبكة الافتراضية الجديدة، يتلقّى رد الاتصال بالشبكة التلقائي المكالمات على الرقمonAvailable()
،onNetworkCapabilitiesChanged()
وonLinkPropertiesChanged()
شبكة الجوال.
الشكل 5 حالة التطبيق بعد قطع الاتصال بشبكة Wi-Fi.
إذا كان إعداد تشغيل بيانات الجوّال دائمًا غير مفعّل، فعندئذٍ عندما تكون شبكة Wi-Fi
يؤدي إلى قطع اتصال الجهاز محاولة إعادة الاتصال بشبكة الجوال. الصورة هي
مشابهة ولكن مع تأخير إضافي لفترة قصيرة لطلبات "onAvailable()
"
فإن رد الاتصال العادي بالشبكة يتلقى أيضًا مكالمات على الرقم onAvailable()
،
وonNetworkCapabilitiesChanged()
وonLinkPropertiesChanged()
بسبب
الهاتف المحمول متاحة.
القيود المفروضة على استخدام الشبكة لنقل البيانات
إنّ القدرة على رؤية شبكة تتضمن معاودة الاتصال بالشبكة لا تعني أنّ تطبيقك يمكنه
استخدام الشبكة لنقل البيانات. بعض الشبكات لا توفّر اتصال بالإنترنت
الاتصال، وقد تقتصر بعض الشبكات على
التطبيقات المتميزة. للتحقق من الاتصال بالإنترنت، يمكنك الاطّلاع على
NET_CAPABILITY_INTERNET
أو
NET_CAPABILITY_VALIDATED
يخضع استخدام الشبكات في الخلفية أيضًا لعمليات التحقّق من الأذونات. إذا كان تطبيقك
يريد استخدام شبكة خلفية، فإنه يحتاج إلى
CHANGE_NETWORK_STATE
إذن.
تسمح التطبيقات التي لديها هذا الإذن للنظام بتجربة
لإظهار شبكة غير عاملة، مثل شبكة الجوّال
عندما يكون الجهاز متصلاً بشبكة Wi-Fi. يستدعي هذا التطبيق
ConnectivityManager.requestNetwork(NetworkRequest, NetworkCallback)
مع NetworkCallback
ليتم طلبه عند طرح الشبكة.