NetworkCallback: এটি কী, প্রয়োগ এবং Android-এ নেটওয়ার্ক হ্যান্ডলিং

লেখক: IT Sectr প্রকাশিত: 2026-03-10 পড়ার সময়: 9 মিনিট

NetworkCallback হল Android SDK-এর একটি অ্যাবস্ট্র্যাক্ট ক্লাস যা ConnectivityManager-এর মাধ্যমে নেটওয়ার্ক অবস্থার পরিবর্তন পর্যবেক্ষণের জন্য। Android Developers Documentation (2025) অনুসারে, NetworkCallback ব্যবহার আপনার অ্যাপকে সংযোগ, বিচ্ছিন্নকরণ বা সংযোগ বৈশিষ্ট্যের পরিবর্তনে সময়মতো সাড়া দিতে সক্ষম করে। ConnectivityManager.NetworkCallback সিস্টেম সার্ভিসে ক্রমাগত পোলিং না করেই নেটওয়ার্কের ধরন, ক্যাপটিভ পোর্টাল এবং ইন্টারনেট হারানোর বিষয়ে বিস্তারিত তথ্য প্রদান করে।

মূল বিষয়

  • NetworkCallback হল Android SDK-এর একটি অন্তর্নির্মিত অ্যাবস্ট্র্যাক্ট ক্লাস যা ConnectivityManager-এর মাধ্যমে নেটওয়ার্ক অবস্থা ট্র্যাক করে।
  • onAvailable পদ্ধতি কল করা হয় যখন ডিভাইস একটি নেটওয়ার্কের সাথে সংযুক্ত হয়, সংযোগের বিবরণ সহ একটি Network অবজেক্ট পাস করে।
  • onLost পদ্ধতি নেটওয়ার্ক সংযোগ বিচ্ছিন্ন হলে সক্রিয় হয়, যা অ্যাপকে নেটওয়ার্ক অনুরোধ বন্ধ করতে দেয়।
  • onCapabilitiesChanged পদ্ধতি নেটওয়ার্ক ক্ষমতার পরিবর্তন — ইন্টারনেট প্রাপ্যতা, ক্যাপটিভ পোর্টাল বা মিটারযুক্ত সংযোগ সম্পর্কে অবহিত করে।
  • রেজিস্ট্রেশন registerNetworkCallback-এর মাধ্যমে করা হয়, বাতিলকরণ unregisterNetworkCallback-এর মাধ্যমে অ্যাপ লাইফসাইকেলে করা হয়।

NetworkCallback কী?

NetworkCallback হল android.net প্যাকেজের একটি অ্যাবস্ট্র্যাক্ট ক্লাস, যা Android SDK-এর অংশ। এটি ConnectivityManager সিস্টেম সার্ভিসের মাধ্যমে নেটওয়ার্ক সংযোগ অবস্থার পরিবর্তন সম্পর্কে বিজ্ঞপ্তি পাওয়ার জন্য ডিজাইন করা হয়েছে।

NetworkCallback-এর আগে, ডেভেলপাররা নেটওয়ার্ক পরিবর্তন ট্র্যাক করতে BroadcastReceiver ব্যবহার করতেন। এই পদ্ধতিতে ম্যানিফেস্টে ধ্রুবক রেজিস্ট্রেশন প্রয়োজন ছিল, বিলম্বে কাজ করত এবং সংযোগের বৈশিষ্ট্য সম্পর্কে বিস্তারিত তথ্য দিত না। Android 5.0 (API 21) NetworkCallback-কে আরও নমনীয় এবং কার্যকর বিকল্প হিসেবে চালু করেছে।

কলব্যাক অ্যাসিঙ্ক্রোনাসভাবে কাজ করে: অ্যাপ ConnectivityManager-এর মাধ্যমে ইভেন্টগুলিতে সাবস্ক্রাইব করে এবং নেটওয়ার্ক অবস্থা পরিবর্তিত হলে সিস্টেম কলব্যাক পদ্ধতিগুলি কল করে। এটি নেটওয়ার্ক অবস্থার পর্যায়ক্রমিক পোলিং-এর প্রয়োজনীয়তা দূর করে, ব্যাটারি এবং CPU সম্পদ সাশ্রয় করে।

Android-এ কলব্যাক কীভাবে কাজ করে

ConnectivityManager ডিভাইসের সমস্ত নেটওয়ার্ক ইন্টারফেস — Wi-Fi, মোবাইল ডেটা, Ethernet, VPN পরিচালনা করে। যখন এই ইন্টারফেসগুলির কোনওটি পরিবর্তিত হয়, সিস্টেম একটি Network অবজেক্ট তৈরি করে এবং এটি রেজিস্টার করা কলব্যাকের সংশ্লিষ্ট পদ্ধতিতে পাঠায়। প্রতিটি Network-এর একটি অনন্য শনাক্তকারী থাকে যা পুনঃসংযোগের সময় পরিবর্তিত হয়।

কলব্যাক কোনও নির্দিষ্ট নেটওয়ার্ক ধরনের সাথে আবদ্ধ নয় — এটি একসাথে সমস্ত উপলব্ধ ইন্টারফেস ট্র্যাক করতে পারে। সংযোগের ধরন ফিল্টার করতে NetworkRequest ক্লাস ব্যবহার করা হয়, যা প্রয়োজনীয় পরিবহন প্রোটোকল (Wi-Fi, সেলুলার ডেটা, Ethernet) এবং নেটওয়ার্ক ক্ষমতা নির্দিষ্ট করে।

আপনার অ্যাপে NetworkCallback কীভাবে রেজিস্টার করবেন

NetworkCallback রেজিস্ট্রেশন ConnectivityManager.registerNetworkCallback পদ্ধতির মাধ্যমে করা হয়। প্রথম প্যারামিটার হল একটি NetworkRequest.Builder যা নেটওয়ার্ক প্রয়োজনীয়তা বর্ণনা করে, দ্বিতীয়টি হল একটি কলব্যাক ইনস্ট্যান্স। ম্যানিফেস্টে ACCESS_NETWORK_STATE অনুমতি প্রয়োজন।

kotlin
class NetworkMonitor(private val context: Context) {

    private val connectivityManager =
        context.getSystemService(Context.CONNECTIVITY_SERVICE)
            as ConnectivityManager

    private val callback =
        object : ConnectivityManager.NetworkCallback() {

        override fun onAvailable(network: Network) {
            Log.d("Network", "Available: ${network}")
        }

        override fun onLost(network: Network) {
            Log.d("Network", "Lost: ${network}")
        }
    }

    fun register() {
        connectivityManager.registerNetworkCallback(
            NetworkRequest.Builder().build(), callback
        )
    }

    fun unregister() {
        connectivityManager.unregisterNetworkCallback(callback)
    }
}

Activity এবং Fragment-এ রেজিস্ট্রেশন

সুপারিশ করা হয় যে অ্যাপ ফোরগ্রাউন্ডে থাকাকালীন NetworkCallback রেজিস্টার করুন এবং ব্যাকগ্রাউন্ডে যাওয়ার সময় বাতিল করুন। Activity-তে, কলব্যাক লাইফসাইকেল পরিচালনা করতে onStart এবং onStop ব্যবহার করুন। Fragment-এ, onResume এবং onPause ব্যবহার করুন।

রেজিস্ট্রেশন পরিচালনা সহজ করতে, আপনি Lifecycle-সচেতন কম্পোনেন্ট ব্যবহার করতে পারেন। AndroidX Lifecycle লাইব্রেরি আপনাকে একটি কাস্টম LifecycleObserver তৈরি করতে দেয় যা লাইফসাইকেল অবস্থা পরিবর্তিত হলে স্বয়ংক্রিয়ভাবে কলব্যাক রেজিস্টার এবং বাতিল করে।

Service-এ রেজিস্ট্রেশন

ব্যাকগ্রাউন্ড কাজের জন্য, রেজিস্ট্রেশন Service বা WorkManager-এ করা হয়। লক্ষ্য করুন যে Android 8+-এ, ব্যাকগ্রাউন্ড সার্ভিসগুলিতে লঞ্চ সীমাবদ্ধতা রয়েছে। NetworkType সহ WorkManager একটি নির্দিষ্ট নেটওয়ার্ক অবস্থার অধীনে কাজ সম্পাদনের আরও নির্ভরযোগ্য উপায়, কারণ এটি সামঞ্জস্য API-এর সাথে সংহত এবং Doze মোডকে সম্মান করে।

NetworkCallback-এর প্রধান পদ্ধতিসমূহ

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

পদ্ধতিকখন কল করা হয়প্যারামিটার
onAvailableনেটওয়ার্ক ব্যবহারের জন্য উপলব্ধNetwork — নেটওয়ার্ক অবজেক্ট
onLostনেটওয়ার্ক হারিয়ে গেছে বা বিচ্ছিন্ন হয়েছেNetwork — নেটওয়ার্ক অবজেক্ট
onCapabilitiesChangedনেটওয়ার্ক ক্ষমতা পরিবর্তিত হয়েছেNetwork, NetworkCapabilities
onBlockedStatusChangedব্লকিং অবস্থা পরিবর্তিত হয়েছেNetwork, Boolean
onNetworkSuspendedসিস্টেম দ্বারা নেটওয়ার্ক স্থগিতNetwork
onNetworkResumedস্থগিতের পর নেটওয়ার্ক পুনরায় শুরুNetwork

onCapabilitiesChanged পদ্ধতি

এই পদ্ধতিটি নেটওয়ার্ক সম্পর্কে বিস্তারিত তথ্য পাওয়ার জন্য গুরুত্বপূর্ণ। NetworkCapabilities প্যারামিটারে ফ্ল্যাগ থাকে: NET_CAPABILITY_INTERNET — ইন্টারনেট অ্যাক্সেস উপলব্ধ, NET_CAPABILITY_NOT_METERED — সীমাহীন সংযোগ, NET_CAPABILITY_NOT_ROAMING — কোনও রোমিং নেই। সিগন্যাল বিলম্ব এবং ব্যান্ডউইথও জানা যায়।

ক্যাপটিভ পোর্টাল একটি বিশেষ ক্ষেত্রে: একটি পোর্টালের মাধ্যমে পাবলিক Wi-Fi নেটওয়ার্কে সংযোগ করার সময়, onCapabilitiesChanged পদ্ধতি অবিলম্বে INTERNET দেখায় না। নেটওয়ার্ক শুরুতে উপলব্ধ কিন্তু ইন্টারনেট ছাড়া — ব্রাউজারের মাধ্যমে অনুমোদন প্রয়োজন। ডেভেলপারদের অ্যাপ যুক্তিতে এই বিলম্ব বিবেচনা করতে হবে।

onBlockedStatusChanged পদ্ধতি

যখন সিস্টেম অ্যাপের জন্য নেটওয়ার্ক ট্রাফিক ব্লক করে — উদাহরণস্বরূপ, ডেটা সেভার মোড চালু হলে বা ব্যাকগ্রাউন্ড ডেটা সীমাবদ্ধ হলে — এটি কল করা হয়। onBlockedStatusChanged অ্যাপকে জানায় যে এর নেটওয়ার্ক অনুরোধগুলি সাময়িকভাবে নিষিদ্ধ এবং স্থানীয় প্রক্রিয়াকরণে স্যুইচ করুন।

NetworkCallback বাস্তবায়নের উদাহরণ

ইন্টারনেট অ্যাক্সেস পর্যবেক্ষণ এবং ক্যাপটিভ পোর্টাল পরিচালনার জন্য একটি ব্যবহারিক NetworkCallback বাস্তবায়ন দেখা যাক। নীচের উদাহরণটি NET_CAPABILITY_INTERNET যাচাই এবং Google সার্ভারে HTTP অনুরোধের মাধ্যমে সংযোগ বৈধতা দেখায়।

kotlin
val networkCallback = object : ConnectivityManager.NetworkCallback() {

    override fun onCapabilitiesChanged(
        network: Network,
        caps: NetworkCapabilities
    ) {
        val hasInternet = caps.hasCapability(
            NetworkCapabilities.NET_CAPABILITY_INTERNET
        )
        val isMetered = caps.hasCapability(
            NetworkCapabilities.NET_CAPABILITY_NOT_METERED
        ).not()

        when {
            hasInternet && isMetered ->
                Log.d("Network", "Mobile data connected")
            hasInternet ->
                Log.d("Network", "Wi-Fi connected")
            else ->
                Log.d("Network", "No internet access")
        }
    }

    override fun onLost(network: Network) {
        Log.d("Network", "Connection lost: ${network}")
        // নেটওয়ার্ক অনুরোধ বন্ধ করুন
    }
}

ক্যাপটিভ পোর্টাল পরিচালনা

অনুমোদন সহ পাবলিক নেটওয়ার্কে (ক্যাফে, বিমানবন্দর) সংযোগ করার সময়, সিস্টেম প্রথমে onAvailable জানায়, কিন্তু onCapabilitiesChanged INTERNET নাও দেখাতে পারে। এই ধরনের ক্ষেত্রে, একটি স্থিতিশীল এন্ডপয়েন্ট যেমন https://www.google.com/generate_204-এ HTTP অনুরোধের মাধ্যমে অতিরিক্ত যাচাই প্রয়োজন।

যদি অনুরোধ কোড 204 ফেরত দেয় — ইন্টারনেট উপলব্ধ। যদি রিডাইরেক্ট (301, 302, 307) — ব্রাউজারের মাধ্যমে অনুমোদন প্রয়োজন। এই ক্ষেত্রে, আপনি পোর্টাল প্রমাণীকরণ সম্পূর্ণ করতে রিডাইরেক্ট URL-এ একটি WebView বা Intent খুলতে পারেন।

kotlin
fun Context.validateInternet(network: Network) {
    CoroutineScope(Dispatchers.IO).launch {
        try {
            val url = URL("https://www.google.com/generate_204")
            val connection =
                network.openConnection(url) as HttpURLConnection
            connection.instanceFollowRedirects = false
            connection.connect()
            when (connection.responseCode) {
                HttpURLConnection.HTTP_NO_CONTENT ->
                    Log.d("Network", "Internet is available")
                in HttpURLConnection.HTTP_MOVED_PERM
                        ..HttpURLConnection.HTTP_TEMP_REDIRECT ->
                    Log.d("Network", "Captive portal detected")
            }
            connection.disconnect()
        } catch (e: Exception) {
            Log.e("Network", "Validation failed: ${e.message}")
        }
    }
}

অন্যান্য নেটওয়ার্ক মনিটরিং পদ্ধতি থেকে পার্থক্য

NetworkCallback-এর আগে, নেটওয়ার্ক পর্যবেক্ষণের প্রাথমিক পদ্ধতি ছিল android.net.conn.CONNECTIVITY_CHANGE ফিল্টার সহ BroadcastReceiver। এই পদ্ধতির উল্লেখযোগ্য ত্রুটি ছিল: কয়েক সেকেন্ডের বিলম্ব, ইন্টারফেস ধরনের তথ্যের অভাব এবং ডিভাইসের ক্রমাগত জাগরণের কারণে বর্ধিত শক্তি খরচ।

একটি আধুনিক বিকল্প হল LiveData বা StateFlow NetworkCallback-এর সাথে মিলিত। প্যাটার্নটিতে কলব্যাককে একটি রিঅ্যাকটিভ স্ট্রিমে মোড়ানো জড়িত যা স্বয়ংক্রিয়ভাবে UI-কে অবস্থা পরিবর্তন সম্পর্কে অবহিত করে। উদাহরণস্বরূপ, NetworkStatus টাইপ সহ একটি MutableStateFlow কলব্যাক পদ্ধতির ভিতরে আপডেট হয় এবং একটি ViewCollector পরিবর্তনগুলিতে সাবস্ক্রাইব করে।

পদ্ধতিAPI Levelবিলম্ববিস্তারিত স্তরশক্তি খরচ
BroadcastReceiver1+উচ্চনিম্নউচ্চ
NetworkCallback21+নিম্নউচ্চনিম্ন
ConnectivityManager.getActiveNetwork23+তাৎক্ষণিকমধ্যমশূন্য
NWPathMonitor (iOS)iOS 12+নিম্নউচ্চনিম্ন

ব্যাকগ্রাউন্ড মোডে কাজ করা

Android 10 থেকে শুরু করে, ব্যাকগ্রাউন্ড সীমাবদ্ধতা কঠোর হয়েছে এবং অ্যাপ ব্যাকগ্রাউন্ডে থাকাকালীন NetworkCallback কল নাও হতে পারে। গুরুত্বপূর্ণ কাজের জন্য — যেমন নেটওয়ার্ক উপলব্ধ হলে ডেটা লোড করা — NetworkType.CONNECTED বাধা সহ WorkManager ব্যবহার করুন। WorkManager নেটওয়ার্ক শর্ত পূরণ হলে কাজ সম্পাদনের গ্যারান্টি দেয়।

Android 12+-এ, CONNECTIVITY_ACTION-এর জন্য BroadcastReceiver-এর ম্যানিফেস্ট রেজিস্ট্রেশন-এ সীমাবদ্ধতা রয়েছে। ডেভেলপারদের NetworkCallback-এ মাইগ্রেট করতে হবে বা WorkManager ব্যবহার করতে হবে। Google Play নীতি আগস্ট 2022 থেকে এই অ্যাকশনের জন্য ম্যানিফেস্ট রেজিস্ট্রেশন অপসারণ প্রয়োজন।

সচরাচর জিজ্ঞাসিত প্রশ্ন

NetworkCallback এবং BroadcastReceiver-এর মধ্যে নেটওয়ার্কের জন্য পার্থক্য কী?

BroadcastReceiver CONNECTIVITY_CHANGE সহ বিস্তারিত ছাড়া এবং কয়েক সেকেন্ড পর্যন্ত বিলম্ব সহ শুধুমাত্র নেটওয়ার্ক পরিবর্তনের ঘটনা প্রদান করে। NetworkCallback অ্যাসিঙ্ক্রোনাসভাবে কাজ করে, Network অবজেক্ট, ইন্টারফেস ধরন, সংযোগ ক্ষমতা প্রদান করে এবং ম্যানিফেস্ট রেজিস্ট্রেশনের প্রয়োজন হয় না, যা Android 12+-এ নিষিদ্ধ।

NetworkCallback কি ব্যাকগ্রাউন্ডে ব্যবহার করা যেতে পারে?

Android 10+-এ, ব্যাকগ্রাউন্ড সীমাবদ্ধতা NetworkCallback কল করতে বিলম্ব বা বাধা দিতে পারে। ব্যাকগ্রাউন্ড কাজের জন্য, NetworkType বাধা সহ WorkManager ব্যবহার করুন — এটি পাওয়ার সেভিং মোড নির্বিশেষে শর্ত পূরণ হলে কাজ সম্পাদনের গ্যারান্টি দেয়।

NetworkCallback-এর রেজিস্ট্রেশন কীভাবে বাতিল করবেন?

ConnectivityManager-এ unregisterNetworkCallback পদ্ধতি কল করুন, রেজিস্ট্রেশনের সময় ব্যবহৃত একই কলব্যাক ইনস্ট্যান্স পাস করুন। অপঞ্জীকৃত কলব্যাক মেমরি লিকের কারণ হতে পারে কারণ সিস্টেম তার রেফারেন্স ধরে রাখে। সর্বদা onStop বা onDestroy-এ পঞ্জীকরণ বাতিল করুন।

NetworkCallback-এর জন্য ন্যূনতম Android সংস্করণ কী প্রয়োজন?

NetworkCallback API Level 21 (Android 5.0 Lollipop) থেকে উপলব্ধ। পুরানো সংস্করণের ডিভাইসগুলির জন্য, BroadcastReceiver বা সামঞ্জস্য লাইব্রেরি যেমন AndroidX Activity NetworkCallback ব্যবহার করুন, যা বিস্তৃত সমর্থনের জন্য API মোড়ক করে।

কলব্যাক ছাড়া বর্তমান নেটওয়ার্ক অবস্থা কীভাবে পরীক্ষা করবেন?

ConnectivityManager.getActiveNetwork (API 23+) getNetworkCapabilities-এর সাথে ব্যবহার করুন। পদ্ধতিটি পরিবর্তনে সাবস্ক্রাইব না করেই সিঙ্ক্রোনাসভাবে বর্তমান সক্রিয় নেটওয়ার্ক ফেরত দেয়। API 21-22-এর জন্য, getActiveNetworkInfo ব্যবহার করুন, যা নতুন সংস্করণে ডেপ্রিকেটেড হিসাবে চিহ্নিত।

সারসংক্ষেপ

  • NetworkCallback হল Android SDK-এর একটি অ্যাবস্ট্র্যাক্ট ক্লাস যা ConnectivityManager-এর মাধ্যমে ক্রমাগত পোলিং ছাড়াই অ্যাসিঙ্ক্রোনাস নেটওয়ার্ক পর্যবেক্ষণের জন্য।
  • onAvailable পদ্ধতি নেটওয়ার্ক সংযোগ সম্পর্কে জানায়, onLost — সংযোগ হারানোর বিষয়ে, onCapabilitiesChanged — নেটওয়ার্ক ক্ষমতার পরিবর্তন সম্পর্কে।
  • রেজিস্ট্রেশন একটি NetworkRequest এবং কলব্যাক ইনস্ট্যান্স সহ registerNetworkCallback-এর মাধ্যমে করা হয়।
  • লাইফসাইকেল-এ Activity-র জন্য onStop এবং Fragment-এর জন্য onPause-এ পঞ্জীকরণ বাতিল করা প্রয়োজন।
  • ক্যাপটিভ পোর্টাল প্রকৃত ইন্টারনেট অ্যাক্সেস যাচাই করতে generate_204-তে অতিরিক্ত HTTP অনুরোধের মাধ্যমে পরিচালিত হয়।
  • NetworkCallback CONNECTIVITY_ACTION-এর জন্য BroadcastReceiver প্রতিস্থাপন করেছে, যা Android 12+-এ ম্যানিফেস্টে নিষিদ্ধ।
  • ব্যাকগ্রাউন্ড কাজের জন্য, সরাসরি NetworkCallback রেজিস্ট্রেশনের পরিবর্তে NetworkType.CONNECTED সহ WorkManager ব্যবহার করুন।

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন