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