وضعیت اتصال و اندازه گیری اتصال را نظارت کنید

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