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

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

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

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

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

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

Kotlin

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

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

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

NetworkCallback-এ সবচেয়ে বেশি প্রয়োগ করা ফাংশনের মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত:

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

Kotlin

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-এ রিপোর্ট করা হয়।

Kotlin

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

জাভা

ConnectivityManager connectivityManager =
        (ConnectivityManager) getSystemService(ConnectivityManager.class);
connectivityManager.requestNetwork(networkRequest, networkCallback);