قراءة حالة الشبكة

يتيح 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، ثم ينقطع الاتصال بها. يفترض المثال أيضًا أن تفعيل الإعداد بيانات الجوّال قيد التشغيل دائمًا في جهازك.

يكون الجدول الزمني على النحو التالي:

  1. عندما يتصل التطبيق بـ registerNetworkCallback()، يتم معاودة الاتصال فورًا تلقّي مكالمات من "onAvailable()" و"onNetworkCapabilitiesChanged()" و onLinkPropertiesChanged() لشبكة الجوال، لأنه فقط شبكة متاحة. في حال توفُّر شبكة أخرى، سيعرض التطبيق أيضًا مع استدعاءات الشبكة الأخرى.

    مخطّط بياني للحالة يعرض حدث معاودة الاتصال بشبكة التسجيل وعمليات معاودة الاتصال التي تم تشغيلها بسبب الحدث
    الشكل 1. حالة التطبيق بعد الاتصال بـ registerNetworkCallback().

  2. بعد ذلك، يطلب التطبيق من "registerDefaultNetworkCallback()". الشبكة التلقائية تبدأ معاودة الاتصال في تلقّي المكالمات على الرقم onAvailable()، onNetworkCapabilitiesChanged() وonLinkPropertiesChanged() شبكة الجوّال، لأن شبكة الجوّال هي الشبكة الافتراضية. في حال حذف تعمل شبكة أخرى غير تلقائية، لا يمكن للتطبيق تلقّي الاتصالات بالشبكة غير الافتراضية.

    مخطّط للحالة يُظهر تسجيل حدث معاودة الاتصال بالشبكة التلقائي
عمليات معاودة الاتصال التي تم إجراؤها بواسطة الحدث
    الشكل 2. حالة التطبيق بعد تسجيل شبكة تلقائية

  3. ويتصل الجهاز لاحقًا بشبكة Wi-Fi (لا تفرض تكلفة استخدام). الخط العادي مع معاودة الاتصال بالشبكة على onAvailable()، onNetworkCapabilitiesChanged() وonLinkPropertiesChanged() شبكة Wi-Fi.

    مخطّط بياني للحالة يعرض عمليات معاودة الاتصال التي تم تشغيلها عند اتصال التطبيق
شبكة جديدة
    الشكل 3. حالة التطبيق بعد الاتصال بشبكة Wi-Fi لا تفرض تكلفة استخدام

  4. في هذه المرحلة، من الممكن أن يستغرق التحقق من شبكة Wi-Fi بعض الوقت. ضِمن في هذه الحالة، يستدعي onNetworkCapabilitiesChanged() الشبكة العادية لا تشتمل معاودة الاتصال على الإمكانية NET_CAPABILITY_VALIDATED. بعد في وقت قصير، يتلقى اتصالاً هاتفيًا بـ onNetworkCapabilitiesChanged()، حيث تشمل الإمكانات الجديدة NET_CAPABILITY_VALIDATED. في معظم الحالات، يكون التحقق من الصحة سريعًا جدًا.

    عندما يتم التحقق من صحة شبكة Wi-Fi، يفضل النظام ذلك على شبكة الجوّال. لأن الشبكة لا تفرض تكلفة استخدام. تصبح شبكة Wi-Fi هي شبكة افتراضية، لذلك يتلقى رد الاتصال بالشبكة الافتراضي اتصالاً onAvailable() وonNetworkCapabilitiesChanged() و onLinkPropertiesChanged() لشبكة Wi-Fi. بدأت شبكة الجوّال إلى الخلفية، ويتلقى المعيد العادي للشبكة اتصالاً onLosing() لشبكة الجوّال.

    ولأن هذا المثال يفترض أن تكون بيانات الجوّال قيد التشغيل دائمًا على هذا الجهاز، فإن عدم انقطاع شبكة الجوال مطلقًا. إذا تم إيقاف الإعداد، فبعد أثناء انقطاع اتصال شبكة الجوّال، وعند معاودة الاتصال بالشبكة العادية مكالمة مع onLost()

    رسم بياني للحالة يعرض عمليات معاودة الاتصال التي تم إجراؤها عند الاتصال بشبكة Wi-Fi
التحقق من صحة الاتصال
    الشكل 4. حالة التطبيق بعد التحقُّق من شبكة Wi-Fi.

  5. بعد ذلك، انقطع اتصال الجهاز بشبكة Wi-Fi فجأة بسبب انقطاع الاتصال بينهما. النطاق. نظرًا لقطع اتصال Wi-Fi، ستتم إعادة الاتصال بالشبكة العادية يتلقّى يمكنك الاتصال برقم onLost() للاتصال بشبكة Wi-Fi. ولأن الهاتف المحمول هو الشبكة الافتراضية الجديدة، يتلقّى رد الاتصال بالشبكة التلقائي المكالمات على الرقم onAvailable()، onNetworkCapabilitiesChanged() وonLinkPropertiesChanged() شبكة الجوال.

    رسم بياني للحالة يعرض عمليات معاودة الاتصال التي تم إجراؤها عند الاتصال بشبكة Wi-Fi
انقطع الاتصال
    الشكل 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 ليتم طلبه عند طرح الشبكة.