কানেক্টিভিটি স্ট্যাটাস ও কানেকশন মিটারিং মনিটর করা

ConnectivityManager এমন একটি API প্রদান করে যা আপনাকে ডিভাইসের ক্ষমতা এবং ডেটা ট্রান্সপোর্ট বিকল্প সহ বিভিন্ন শর্তের উপর ভিত্তি করে ডিভাইসটিকে একটি নেটওয়ার্কের সাথে কানেক্ট করার জন্য অনুরোধ করতে দেয়।

কলব্যাক ইমপ্লিমেন্টেশন আপনার অ্যাপকে ডিভাইসের কানেকশন স্ট্যাটাস এবং বর্তমানে কানেক্ট করা নেটওয়ার্কের ক্ষমতা সম্পর্কে তথ্য প্রদান করে। API আপনাকে নির্ধারণ করতে দেয় যে ডিভাইসটি বর্তমানে এমন কোনও নেটওয়ার্কের সাথে কানেক্ট করা আছে কিনা যা আপনার অ্যাপের প্রয়োজনীয়তা পূরণ করে।

নেটওয়ার্ক অনুরোধ কনফিগার করা

নেটওয়ার্কের ট্রান্সপোর্ট টাইপ, যেমন ওয়াই-ফাই বা মোবাইল কানেকশন এবং বর্তমানে কানেক্ট করা নেটওয়ার্কের ক্ষমতা, যেমন ইন্টারনেট কানেকশন নির্দিষ্ট করতে, আপনাকে অবশ্যই নেটওয়ার্ক রিকোয়েস্ট কনফিগার করতে হবে।

NetworkRequest ঘোষণা করুন যা আপনার অ্যাপের নেটওয়ার্ক কানেকশন সংক্রান্ত প্রয়োজনীয়তা বর্ণনা করে। নিম্নলিখিত কোডটি এমন একটি নেটওয়ার্কের জন্য অনুরোধ তৈরি করে যা ইন্টারনেটের সাথে কানেক্ট করা আছে এবং ট্রান্সপোর্ট টাইপের জন্য ওয়াই-ফাই, ইথারনেট বা মোবাইল কানেকশন ব্যবহার করে।

private val networkRequest = 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 ব্যবহার করুন। মিটারড কানেকশন ব্যবহার করার সময়, আপনার অ্যাপের ডেটা খরচ কমানোর চেষ্টা করুন অথবা ডিভাইস নন-মিটারড কানেকশন না পাওয়া পর্যন্ত অপেক্ষা করুন।

নেটওয়ার্ক কলব্যাক কনফিগার করুন

ConnectivityManager-এর সাথে NetworkRequest রেজিস্টার করার সময়, কানেকশন স্ট্যাটাস ও নেটওয়ার্কের ক্ষমতা সংক্রান্ত পরিবর্তন সম্পর্কে বিজ্ঞপ্তি পেতে আপনাকে অবশ্যই NetworkCallback প্রয়োগ করতে হবে।

NetworkCallback-এ সবচেয়ে বেশি ব্যবহৃত ফাংশনগুলি হল:

  • onAvailable() এটি দেখায় যে ডিভাইসটি এমন একটি নতুন নেটওয়ার্কের সাথে কানেক্ট করা আছে যা NetworkRequest-এ উল্লেখ করা ক্ষমতা ও ট্রান্সপোর্ট টাইপ সংক্রান্ত প্রয়োজনীয়তা পূরণ করে।
  • onLost() আইকনটি দেখায় যে ডিভাইসের সাথে নেটওয়ার্কের কানেকশন বিচ্ছিন্ন হয়ে গেছে।
  • onCapabilitiesChanged() নেটওয়ার্কের ক্ষমতা পরিবর্তিত হয়েছে বলে ইঙ্গিত করে। NetworkCapabilities অবজেক্ট নেটওয়ার্কের বর্তমান ক্ষমতা সম্পর্কে তথ্য প্রদান করে।

private val networkCallback = object : ConnectivityManager.NetworkCallback() {
    override fun onAvailable(network: Network) {
        // Network is available for use.
    }

    // Network capabilities have changed for the network.
    override fun onCapabilitiesChanged(
        network: Network,
        networkCapabilities: NetworkCapabilities
    ) {
        val unmetered =
            networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)
        if (!unmetered) {
            // Reduce data usage, or delay it until the network is unmetered.
        }
    }

    override fun onLost(network: Network) {
        // Lost network connection.
    }
}

নেটওয়ার্ক আপডেটের জন্য রেজিস্টার করুন

NetworkRequest ও NetworkCallback ঘোষণা করার পরে, requestNetwork() বা registerNetworkCallback() ফাংশন ব্যবহার করে এমন নেটওয়ার্ক খুঁজুন যা NetworkRequest-এর শর্ত পূরণ করে এবং ডিভাইসের সাথে কানেক্ট করা যায়। তারপর স্ট্যাটাস NetworkCallback-এ রিপোর্ট করা হয়।

val connectivityManager = getSystemService(ConnectivityManager::class.java)
connectivityManager.registerNetworkCallback(networkRequest, networkCallback)