ওভারভিউ
এই উদাহরণটি দেখাবে কিভাবে 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 লগইন পেজ) ডিটেক্ট করা যায়।