يوفّر ConnectivityManager
واجهة برمجة تطبيقات تتيح لك طلب ربط الجهاز بشبكة استنادًا إلى
شروط مختلفة تشمل إمكانات الجهاز وخيارات نقل البيانات.
يقدّم تنفيذ دالة الاستدعاء معلومات لتطبيقك حول حالة اتصال الجهاز بالإضافة إلى إمكانات الشبكة المتصل بها حاليًا. تتيح لك واجهة برمجة التطبيقات تحديد ما إذا كان الجهاز متصلاً حاليًا بشبكة تستوفي متطلبات تطبيقك.
ضبط طلب شبكة
لتحديد نوع النقل للشبكة، مثل Wi-Fi أو اتصال شبكة جوّال، وإمكانات الشبكة المتصلة حاليًا، مثل اتصال الإنترنت، يجب ضبط طلب شبكة.
حدِّد NetworkRequest
يصف
احتياجات اتصال تطبيقك بالشبكة. تنشئ التعليمة البرمجية التالية طلبًا لشبكة متصلة بالإنترنت وتستخدم إما شبكة Wi-Fi
أو اتصالاً خلويًا لنوع النقل.
Kotlin
val networkRequest = NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) .build()
Java
NetworkRequest networkRequest = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) .build();
يُرجى العِلم أنّ بعض عمليات الاتصال قد تكون أكثر تكلفة من غيرها (مثلاً، عادةً ما يكون الاتصال عبر الأجهزة الجوّالة باهظ التكلفة). استخدِم
NetworkCapabilities#NET_CAPABILITY_NOT_METERED
لتحديد ما إذا كان الاتصال باهظ التكلفة. عند استخدام اتصال محدود،
احرص على تقليل استهلاك التطبيق للبيانات أو تأجيل استخدامه إلى أن يتصل الجهاز بشبكة
غير محدودة.
ضبط ردّ اتصال على الشبكة
عند تسجيل NetworkRequest
في ConnectivityManager
، عليك
تنفيذ
NetworkCallback
لتلقّي إشعارات بشأن التغييرات في حالة الاتصال وقدرات
الشبكة.
تشمل الدوالّ الأكثر شيوعًا التي يتم تنفيذها في NetworkCallback
ما يلي:
- يشير الرمز
onAvailable()
إلى أنّ الجهاز متصل بشبكة جديدة تستوفي متطلبات الإمكانات ونوع النقل المحدّدة فيNetworkRequest
. - يشير الرمز
onLost()
إلى أنّ الجهاز فقد الاتصال بالشبكة. - يشير الرمز
onCapabilitiesChanged()
إلى أنّ إمكانات الشبكة قد تغيّرت. يقدّم عنصرNetworkCapabilities
معلومات عن الإمكانات الحالية للشبكة.
Kotlin
private val networkCallback = object : ConnectivityManager.NetworkCallback() { // network is available for use override fun onAvailable(network: Network) { super.onAvailable(network) } // Network capabilities have changed for the network override fun onCapabilitiesChanged( network: Network, networkCapabilities: NetworkCapabilities ) { super.onCapabilitiesChanged(network, networkCapabilities) val unmetered = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED) } // lost network connection override fun onLost(network: Network) { super.onLost(network) } }
Java
private ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(@NonNull Network network) { super.onAvailable(network); } @Override public void onLost(@NonNull Network network) { super.onLost(network); } @Override public void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities networkCapabilities) { super.onCapabilitiesChanged(network, networkCapabilities); final boolean unmetered = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED); } };
الاشتراك لتلقّي آخر المعلومات حول الشبكة
بعد تحديد NetworkRequest
وNetworkCallback
، استخدِم الدالتَين
requestNetwork()
أو registerNetworkCallback()
للبحث عن شبكة للاتصال بها من الجهاز التي تستوفي
NetworkRequest
. ويتم بعد ذلك الإبلاغ عن الحالة إلى NetworkCallback
.
Kotlin
val connectivityManager = getSystemService(ConnectivityManager::class.java) as ConnectivityManager connectivityManager.requestNetwork(networkRequest, networkCallback)
Java
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(ConnectivityManager.class); connectivityManager.requestNetwork(networkRequest, networkCallback);