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

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

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

যখন আপনি 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 ঘোষণা করার পর, 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);