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);
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);