Skip to main content

Access The Serial Number

Before you start, the code below will only work if your app has been granted elevated privileges. To do this, reach out to your contact or email [email protected] directly.

Starting with Almer OS 2, apps can access the serial number only if they are granted android.permission.READ_PRIVILEGED_PHONE_STATE on the OS layer .

Add android.permission.READ_PRIVILEGED_PHONE_STATE to your AndroidManifest and use the following sample code to get the Serial Number.

import android.annotation.SuppressLint

/**
* Provides access to the device serial number.
* Note: Apps that use the serial number should manually add the `READ_PRIVILEGED_PHONE_STATE`
* permission in their Manifest.
*/
@SuppressLint("PrivateApi", "MissingPermission")
object DeviceProperties {
val serialNumber: String by lazy {
var serialNumber: String
val c = Class.forName("android.os.SystemProperties")
val get = c.getMethod("get", String::class.java)
serialNumber = get.invoke(c, "gsm.sn1") as String
if (serialNumber.isEmpty()) serialNumber = get.invoke(c, "ril.serialnumber") as String
if (serialNumber.isEmpty()) serialNumber = get.invoke(c, "ro.serialno") as String
if (serialNumber.isEmpty()) serialNumber = get.invoke(c, "sys.serialnumber") as String
if (serialNumber.isEmpty()) serialNumber = get.invoke(c, "ro.boot.serialno") as String
if (serialNumber.isEmpty()) serialNumber = Build.getSerial()
serialNumber
}
}