সংযোগ স্থিতি এবং সংযোগ পরিমাপ নিরীক্ষণ

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

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

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

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

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

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

যখন আপনি ConnectivityManager সাথে NetworkRequest নিবন্ধন করেন, তখন সংযোগের অবস্থা এবং নেটওয়ার্কের সক্ষমতার পরিবর্তন সম্পর্কে বিজ্ঞপ্তি পাওয়ার জন্য আপনাকে অবশ্যই একটি 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 ঘোষণা করার পর, NetworkRequest পূরণকারী ডিভাইস থেকে সংযোগ করার জন্য একটি নেটওয়ার্ক খুঁজতে requestNetwork() বা registerNetworkCallback() ফাংশনগুলো ব্যবহার করুন। এরপর এর অবস্থা NetworkCallback এ জানানো হয়।

কোটলিন

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

জাভা

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