ConnectivityManager
یک API ارائه می دهد که به شما امکان می دهد بر اساس شرایط مختلف که شامل قابلیت های دستگاه و گزینه های انتقال داده می شود، درخواست کنید که دستگاه به یک شبکه متصل شود.
اجرای پاسخ به تماس اطلاعاتی را در مورد وضعیت اتصال دستگاه و همچنین قابلیت های شبکه متصل فعلی به برنامه شما ارائه می دهد. API به شما امکان می دهد تعیین کنید که آیا دستگاه در حال حاضر به شبکه ای متصل است که نیازهای برنامه شما را برآورده می کند.
یک درخواست شبکه را پیکربندی کنید
برای تعیین نوع انتقال شبکه، مانند اتصال Wi-Fi یا سلولی، و قابلیتهای شبکه متصل فعلی، مانند اتصال به اینترنت، باید درخواست شبکه را پیکربندی کنید.
یک NetworkRequest
اعلام کنید که نیازهای اتصال شبکه برنامه شما را توضیح می دهد. کد زیر یک درخواست برای شبکه ای ایجاد می کند که به اینترنت متصل است و برای نوع حمل و نقل از اتصال Wi-Fi یا سلولی استفاده می کند.
کاتلین
val networkRequest = NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) .build()
جاوا
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
اطلاعاتی در مورد قابلیت های فعلی شبکه ارائه می دهد.
کاتلین
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) } }
جاوا
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
گزارش می شود.
کاتلین
val connectivityManager = getSystemService(ConnectivityManager::class.java) as ConnectivityManager connectivityManager.requestNetwork(networkRequest, networkCallback)
جاوا
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(ConnectivityManager.class); connectivityManager.requestNetwork(networkRequest, networkCallback);