Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีดึงหมายเลขซีเรียล (Serial Number) ของ Android โดยโปรแกรม

ภาพรวม

บทความนี้แนะนำการดึง Serial Number ของอุปกรณ์ผ่าน Build.getSerial() (API 26+) แทน Build.SERIAL ที่ Deprecated แล้ว ต้องขออนุญาต READ_PHONE_STATE

โค้ดหลัก

// API 26+ (Android 8.0 Oreo)
textView.setText(Build.getSerial());

// API เก่า (Deprecated)
textView.setText(Build.SERIAL);

การเปลี่ยนแปลงตามเวอร์ชัน Android

Android VersionAPIวิธีเข้าถึง SerialPermission
Android 7.1 และก่อน< 26Build.SERIAL (public field)ไม่ต้องการ
Android 8.0 - 9.026-28Build.getSerial()READ_PHONE_STATE
Android 10 (Q)29Build.getSerial()READ_PRIVILEGED_PHONE_STATE*
Android 11+30+Build.getSerial()READ_PRIVILEGED_PHONE_STATE* (System apps เท่านั้น)

* READ_PRIVILEGED_PHONE_STATE ให้เฉพาะ System/Privileged apps แอปทั่วไปจะได้ค่า "unknown" หรือโยน SecurityException

โค้ดที่รองรับหลายเวอร์ชัน

public static String getDeviceSerial(Context context) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        // Android 8.0+
        if (context.checkSelfPermission(Manifest.permission.READ_PHONE_STATE) 
                == PackageManager.PERMISSION_GRANTED) {
            return Build.getSerial();
        }
    } else {
        // Android 7.1 และก่อน
        return Build.SERIAL;
    }
    return "unknown";
}

ทางเลือกแทน Serial Number (สำหรับ Android 10+)

  • Settings.Secure.ANDROID_ID: Unique per app-signing-key + user + device (Reset เมื่อ Factory Reset)
  • Advertising ID: สำหรับโฆษณา ผู้ใช้รีเซ็ตได้
  • Instance ID / Firebase Installation ID: ต่อแอปต่ออินสแตนซ์
  • Attestation Key: Hardware-backed key สำหรับ Device Integrity

ข้อควรระวัง

  • Serial Number ถือเป็น PII (Personally Identifiable Information)
  • Google Play Policy จำกัดการเก็บรวบรวม Hardware IDs
  • ควรใช้ Android ID หรือ Advertising ID แทนสำหรับกรณีส่วนใหญ่

Manifest

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