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

কোটলিন ব্যবহার করে অ্যান্ড্রয়েড ডিভাইসের সিরিয়াল নম্বর পাওয়ার পদ্ধতি

এই উদাহরণটি দেখায় কিভাবে কোটলিন ব্যবহার করে অ্যান্ড্রয়েড ডিভাইসের সিরিয়াল নম্বর (Serial Number) পাওয়া যায়। Build.SERIAL এবং TelephonyManager ব্যবহার করে دوটি পদ্ধতি দেখানো হয়েছে।

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

Android Studio-তে File → New Project এ যান এবং প্রয়োজনীয় বিবরণ পূরণ করে একটি নতুন প্রজেক্ট তৈরি করুন।

দ্বিতীয় ধাপ: লেআউট XML ডিজাইন করুন

res/layout/activity_main.xml ফাইলে নিচের কোড যোগ করুন:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="50dp"
        android:text="Tutorials Point"
        android:textAlignment="center"
        android:textColor="@android:color/holo_green_dark"
        android:textSize="32sp"
        android:textStyle="bold" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:onClick="showDeviceInfo"
        android:text="সিরিয়াল নম্বর পান" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/button"
        android:layout_centerInParent="true"
        android:layout_marginTop="16sp" />

</RelativeLayout>

তৃতীয় ধাপ: MainActivity.kt তে সিরিয়াল নম্বর পাওয়ার লজিক লিখুন

src/MainActivity.kt ফাইলে নিচের কোড যোগ করুন। মূল কোডে AlertDialog ব্যবহার করা হয়েছিল, এখানে সরাসরি TextView-এ দেখানো হয়েছে সহজতার জন্য:

import android.Manifest
import android.content.Context
import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle
import android.telephony.TelephonyManager
import android.view.View
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat

class MainActivity : AppCompatActivity() {
    private val requestState = 100
    private var checkedPermission = PackageManager.PERMISSION_DENIED
    private lateinit var manager: TelephonyManager
    private lateinit var textView: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "KotlinApp"

        textView = findViewById(R.id.textView)

        checkedPermission = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)
        if (Build.VERSION.SDK_INT >= 23 && checkedPermission != PackageManager.PERMISSION_GRANTED) {
            requestPermission()
        } else {
            checkedPermission = PackageManager.PERMISSION_GRANTED
        }
    }

    private fun requestPermission() {
        Toast.makeText(this, "পারমিশন অনুরোধ করা হচ্ছে", Toast.LENGTH_SHORT).show()
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            requestPermissions(arrayOf(Manifest.permission.READ_PHONE_STATE), requestState)
        }
    }

    fun showDeviceInfo(view: View) {
        manager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
        val stringBuilder = StringBuilder()

        if (checkedPermission == PackageManager.PERMISSION_GRANTED) {
            // পদ্ধতি ১: Build.SERIAL (API 26+ এ কাজ করে, পুরানো ভার্সনে UNKNOWN দেয়)
            val serialBuild = Build.getSerial() // API 26+ এর জন্য ডিপ্রিকেটেড Build.SERIAL-এর বিকল্প
            stringBuilder.append("Build.SERIAL: $serialBuild\n\n")

            // পদ্ধতি ২: TelephonyManager (সিম-ভিত্তিক ডিভাইসের জন্য)
            try {
                val imei = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    manager.imei
                } else {
                    @SuppressLint("MissingPermission") manager.deviceId
                }
                stringBuilder.append("IMEI/MEID: $imei\n\n")
            } catch (e: SecurityException) {
                stringBuilder.append("IMEI পাওয়া যায়নি: পারমিশন Từচ্ছা\n\n")
            }
        } else {
            stringBuilder.append("পারমিশন Từচ্ছা! ডিভাইস ইনফো অ্যাক্সেস করা যায়নি।")
        }

        textView.text = stringBuilder.toString()
    }

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        when (requestCode) {
            requestState -> if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                checkedPermission = PackageManager.PERMISSION_GRANTED
                Toast.makeText(this, "পারমিশন মঞ্জুর", Toast.LENGTH_SHORT).show()
            }
        }
    }
}

চতুর্থ ধাপ: ম্যানিফেস্ট ফাইলে পারমিশন যোগ করুন

androidManifest.xml ফাইলে READ_PHONE_STATE পারমিশন যোগ করুন:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.q11">

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <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>

গুরুত্বপূর্ণ নোট

  • Build.SERIAL: API 26 (Android 8.0) থেকে ডিপ্রিকেটেড। API 29+ এ নন-সিস্টেম অ্যাপের জন্য "UNKNOWN" রিটার্ন করে। বদলে Build.getSerial() ব্যবহার করুন (API 26+)।
  • READ_PHONE_STATE: অ্যান্ড্রয়েড ১০ (API 29) থেকে এই পারমিশন দিয়ে IMEI/Serial অ্যাক্সেস সীমাবদ্ধ। শুধু সিস্টেম অ্যাপ বা ক্যারিয়ার প্রিভিলেজড অ্যাপ পাবে।
  • বিকল্প আইডি: গোপনียতা রক্ষার জন্য এখন Advertising ID (AdvertisingIdClient.getAdvertisingIdInfo()) বা Instance ID (FirebaseInstallations.getInstance().id) ব্যবহার করা ভালো।
  • Wi-Fi فقط ডিভাইস (ট্যাবলেট) এ TelephonyManager null রিটার্ন করতে পারে।

অ্যাপ্লিকেশন চালানোর নির্দেশনা

অ্যান্ড্রয়েড ডিভাইস সংযুক্ত করে Run করুন। প্রথমবারের মতো পারমিশন মঞ্জুর করুন। "সিরিয়াল নম্বর পান" বাটনে ক্লিক করলে ডিভাইসের সিরিয়াল/IMEI ইনফো দেখাবে।

  1. অ্যান্ড্রয়েড ডিভাইসের সিরিয়াল নম্বর বের করার পদ্ধতি

  2. Android ডিভাইসের GPS সক্রিয় আছে কিনা যাচাই করা

  3. Python-এ একটি সংখ্যার ফ্যাক্টোরিয়াল (Factorial) বের করা

  4. আইফোন বা আইপ্যাডে সিরিয়াল নম্বর খুঁজে বের করার উপায়