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

ConnectivityManager একটি 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 ঘোষণা করার পরে, 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);
,

ConnectivityManager একটি 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 ঘোষণা করার পরে, 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);