অ্যান্ড্রয়েড ডিভাইসের সিরিয়াল নম্বর এবং ডিভাইস ইনফো পাওয়া
এই উদাহরণটি দেখায় কীভাবে `Build.SERIAL` এবং `TelephonyManager` ব্যবহার করে ডিভাইসের সিরিয়াল নম্বর এবং অন্যান্য তথ্য বের করা যায়। দ্রষ্টব্য: Android 10 (API 29) থেকে গোপনীয়তা নীতির কারণে সিরিয়াল নম্বর পাওয়া সীমাবদ্ধ।
ধাপ ১: নতুন প্রজেক্ট তৈরি করুন
Android Studio-তে File → New Project থেকে প্রজেক্ট তৈরি করুন।
ধাপ ২: লেআউট XML (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">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="showDeviceInfo"
android:text="Get Serial Number"
android:layout_centerInParent="true" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/button"
android:layout_centerHorizontal="true"
android:layout_marginTop="16dp" />
</RelativeLayout>
ধাপ ৩: MainActivity.java বাস্তবায়ন
import android.Manifest;
import android.app.AlertDialog;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.telephony.TelephonyManager;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
public static final int REQUEST_CODE_PHONE_STATE_READ = 100;
private int checkedPermission = PackageManager.PERMISSION_DENIED;
TelephonyManager manager;
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
// রানটাইম পারমিশন চেক (Android 6.0+)
checkedPermission = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkedPermission != PackageManager.PERMISSION_GRANTED) {
requestPermission();
} else {
checkedPermission = PackageManager.PERMISSION_GRANTED;
}
}
private void requestPermission() {
Toast.makeText(this, "Requesting permission", Toast.LENGTH_SHORT).show();
requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_CODE_PHONE_STATE_READ);
}
public void showDeviceInfo(View v) {
manager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
StringBuilder stringBuilder = new StringBuilder();
// Build.SERIAL (Android 9 পর্যন্ত কাজ করে)
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
stringBuilder.append("SERIAL: ").append(Build.SERIAL).append("\n");
} else {
stringBuilder.append("SERIAL: Restricted (Android 10+)\n");
}
// অন্যান্য ডিভাইস ইনফো (পারমিশন ছাড়াও কাজ করে)
stringBuilder.append("MODEL: ").append(Build.MODEL).append("\n");
stringBuilder.append("BRAND: ").append(Build.BRAND).append("\n");
stringBuilder.append("MANUFACTURER: ").append(Build.MANUFACTURER).append("\n");
stringBuilder.append("DEVICE: ").append(Build.DEVICE).append("\n");
stringBuilder.append("API LEVEL: ").append(Build.VERSION.SDK_INT).append("\n");
stringBuilder.append("ANDROID VERSION: ").append(Build.VERSION.RELEASE).append("\n");
// IMEI/MEID (READ_PHONE_STATE পারমিশন দরকার)
if (checkedPermission == PackageManager.PERMISSION_GRANTED && manager != null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
stringBuilder.append("IMEI: ").append(manager.getImei()).append("\n");
} else {
stringBuilder.append("DEVICE ID: ").append(manager.getDeviceId()).append("\n");
}
} else {
stringBuilder.append("IMEI: Permission required\n");
}
textView.setText(stringBuilder.toString());
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_CODE_PHONE_STATE_READ) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
checkedPermission = PackageManager.PERMISSION_GRANTED;
Toast.makeText(this, "Permission granted", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Permission denied", Toast.LENGTH_SHORT).show();
}
}
}
}
গুরুত্বপূর্ণ পরিবর্তন (Android 10+)
- Build.SERIAL: Android 10 (API 29) থেকে সাধারণ অ্যাপের জন্য `Build.UNKNOWN` রিটার্ন করে
- IMEI/MEID: `READ_PRIVILEGED_PHONE_STATE` পারমিশন দরকার (সিস্টেম অ্যাপের জন্য)
- বিকল্প: `Settings.Secure.ANDROID_ID` ব্যবহার করুন যুনিক আইডি পাওয়ার জন্য
Android ID পাওয়ার পদ্ধতি (পারমিশন ছাড়া)
String androidId = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID); // নোট: ফ্যাক্টরি রিসেটে এটি পরিবর্তন হয়ে যেতে পারে
ধাপ ৪: AndroidManifest.xml (পারমিশন সহ)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.sample">
<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>
অ্যাপ্লিকেশন টেস্ট করুন
অ্যাপ রান করুন, "Get Serial Number" বাটনে ক্লিক করুন। পারমিশন দেয়া থাকলে ডিভাইসের সিরিয়াল নম্বর, মডেল, ব্র্যান্ড, IMEI ইত্যাদি দেখাবে।