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