توفّر 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);