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