Skip to content

Instantly share code, notes, and snippets.

@AlaaEddinAlbarghoth
Created December 2, 2020 13:43
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AlaaEddinAlbarghoth/d2b61f3fef22dbd00507eba531a8a352 to your computer and use it in GitHub Desktop.
Save AlaaEddinAlbarghoth/d2b61f3fef22dbd00507eba531a8a352 to your computer and use it in GitHub Desktop.
Get the Device serial number for all versions of android
fun getDeviceSerial(applicationContext: Context): String? {
var serialNumber: String?
try {
val c = Class.forName("android.os.SystemProperties")
val get = c.getMethod("get", String::class.java)
serialNumber = get.invoke(c, "gsm.sn1") as String
when (serialNumber) {
"" -> serialNumber = get.invoke(c, "ril.serialnumber") as String
}
when (serialNumber) {
"" -> serialNumber = get.invoke(c, "ro.serialno") as String
}
when (serialNumber) {
"" -> serialNumber = get.invoke(c, "sys.serialnumber") as String
}
@Suppress("DEPRECATION")
when (serialNumber) {
"" -> serialNumber = Build.SERIAL
}
when (serialNumber) {
"" -> serialNumber = null
}
} catch (e: Exception) {
e.printStackTrace()
Toast.makeText(applicationContext, e.message, Toast.LENGTH_LONG).show()
serialNumber = null
}
if (serialNumber == "unknown") {
try {
val c = Class.forName("android.os.SystemProperties")
val get = c.getMethod(
"get",
String::class.java,
String::class.java
)
serialNumber = get.invoke(c, "ril.serialnumber", "unknown") as String
} catch (ignored: Exception) {
Timber.d("BuildSerialException getDeviceSerial: $ignored")
Toast.makeText(applicationContext, "ignored ${ignored.message}", Toast.LENGTH_LONG)
.show()
}
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && serialNumber == "unknown") {
if (ActivityCompat.checkSelfPermission(
applicationContext,
Manifest.permission.READ_PHONE_STATE
) == PackageManager.PERMISSION_GRANTED
) {
serialNumber = Settings.Secure.getString(
applicationContext.contentResolver,
Settings.Secure.ANDROID_ID
)
}
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && serialNumber == "unknown") {
if (ActivityCompat.checkSelfPermission(
applicationContext,
Manifest.permission.READ_PHONE_STATE
) == PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(
applicationContext,
Manifest.permission.READ_PRECISE_PHONE_STATE
) == PackageManager.PERMISSION_GRANTED
) {
serialNumber = Build.getSerial()
}
}
return serialNumber
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment