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