কম্পিউটার টিউটোরিয়াল

Kotlin দিয়ে Android-এ ইন্টারনেট সংযোগ ও নেটওয়ার্ক টাইপ চেক করা

ওভারভিউ

এই উদাহরণটি দেখাবে কিভাবে ConnectivityManager ব্যবহার করে ডিভাইসের ইন্টারনেট সংযোগের উপলব্ধতা এবং নেটওয়ার্কের ধরন (Wi-Fi, মোবাইল ডেটা ইত্যাদি) যাচাই করা যায়।

প্রয়োজনীয় ধাপসমূহ

ধাপ ১: নতুন প্রজেক্ট তৈরি

Android Studio-এ নতুন প্রজেক্ট তৈরি করুন।

ধাপ ২: activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="70dp"
        android:background="#008080"
        android:padding="5dp"
        android:text="TutorialsPoint"
        android:textColor="#fff"
        android:textSize="24sp"
        android:textStyle="bold" />
    
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textColor="@android:color/holo_purple"
        android:textSize="24sp"
        android:textStyle="bold" />
</RelativeLayout>

ধাপ ৩: MainActivity.kt (আধুনিক পদ্ধতি)

import android.content.Context
import android.net.ConnectivityManager
import android.net.Network
import android.net.NetworkCapabilities
import android.net.NetworkRequest
import android.os.Build
import android.os.Bundle
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    private lateinit var textView: TextView
    private lateinit var connectivityManager: ConnectivityManager
    private var networkCallback: ConnectivityManager.NetworkCallback? = null
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "Network Check Demo"
        
        textView = findViewById(R.id.textView)
        connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        
        checkNetworkStatus()
        registerNetworkCallback()
    }
    
    private fun checkNetworkStatus() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            val activeNetwork = connectivityManager.activeNetwork
            val capabilities = activeNetwork?.let { connectivityManager.getNetworkCapabilities(it) }
            
            val hasInternet = capabilities?.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) == true
            val hasValidation = capabilities?.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) == true
            
            if (hasInternet && hasValidation) {
                val transportType = when {
                    capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> "Wi-Fi"
                    capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> "Mobile Data"
                    capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> "Ethernet"
                    else -> "Unknown"
                }
                
                textView.text = "Network type: $transportType"
                Toast.makeText(this, "Internet available via $transportType", Toast.LENGTH_SHORT).show()
            } else {
                textView.text = "No active internet connection"
                Toast.makeText(this, "Network not available", Toast.LENGTH_SHORT).show()
            }
        } else {
            // Legacy API (deprecated)
            val networkInfo = connectivityManager.activeNetworkInfo
            val isConnected = networkInfo?.isConnected == true
            textView.text = "Network type: ${networkInfo?.typeName ?: "Unknown"}"
            Toast.makeText(this, if (isConnected) "Connected" else "Not connected", Toast.LENGTH_SHORT).show()
        }
    }
    
    private fun registerNetworkCallback() {
        val request = NetworkRequest.Builder()
            .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
            .build()
        
        networkCallback = object : ConnectivityManager.NetworkCallback() {
            override fun onAvailable(network: Network) {
                runOnUiThread { checkNetworkStatus() }
            }
            
            override fun onLost(network: Network) {
                runOnUiThread { checkNetworkStatus() }
            }
        }
        
        connectivityManager.registerNetworkCallback(request, networkCallback!!)
    }
    
    override fun onDestroy() {
        super.onDestroy()
        networkCallback?.let { connectivityManager.unregisterNetworkCallback(it) }
    }
}

ধাপ ৪: AndroidManifest.xml (পারমিশন)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.networkcheck">
    
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!-- Android 12+ এর জন্য -->
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    
    <application ...>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

গুরুত্বপূর্ণ পরিবর্তন (API 29+)

  • getNetworkInfo() এবং getActiveNetworkInfo() **ডিপ্রিকেটেড** (API 29+)
  • নতুন API: ConnectivityManager.NetworkCallback ব্যবহার করে রিয়েল-টাইম নেটওয়ার্ক মনিটরিং
  • NetworkCapabilities ক্লাস দিয়ে নেটওয়ার্কের ক্ষমতা (internet, validated, not metered ইত্যাদি) চেক করা যায়

সেরা অনুশীলন

নেটওয়ার্ক কল করার আগে সবসময় `NetworkCallback` বা `activeNetwork` চেক করুন। শুধু `isConnected()` কাফি নয়, `NET_CAPABILITY_VALIDATED` চেক করুন যাতে ক্যাপটিভ পোর্টাল (Wi-Fi লগইন পেজ) ডিটেক্ট করা যায়।

  1. Android-এ ইন্টারনেট কানেকশন চেক করার পদ্ধতি

  2. এন্ড্রয়েডে বর্তমান ইন্টারনেট সংযোগের ধরন জানার উপায়

  3. অ্যান্ড্রয়েডে ইন্টারনেট কানেকশন উপলব্ধতা চেক করার পদ্ধতি

  4. অ্যান্ড্রয়েড এমুলেটরের IP ঠিকানা কোটলিন ব্যবহার করে পাওয়ার উপায়