Как программно получить доступ к значению, показанному на изображении ниже?
Как программно получить доступ к значению, показанному на изображении ниже?
Это серийный номер оборудования. Чтобы получить доступ к нему на
Android 8 и более поздние версии (> = SDK 26) используют android.os.Build.getSerial()
чего требуется опасное разрешение READ_PHONE_STATE. Использование android.os.Build.SERIAL
возвращает android.os.Build.UNKNOWN.
Android 7.1 и более ранние android.os.Build.SERIAL
(<= SDK 25) и более ранние android.os.Build.SERIAL
возвращают действительные серийные номера.
Это уникально для любого устройства. Если вы ищете возможности получить/использовать уникальный идентификатор устройства, вы должны прочитать здесь.
Для решения, включающего отражение без разрешения, смотрите этот ответ.
До Android 7.1 (SDK 25) вы получите:
Build.SERIAL
Остерегайтесь на Android 8 (SDK 26) и выше, это поле будет возвращать UNKNOWN
и должно быть доступно с помощью:
Build.getSerial()
для чего требуется опасное разрешение android.permission.READ_PHONE_STATE
.
См. Https://developer.android.com/reference/android/os/Build.html#getSerial()
Build.SERIAL
может быть пустым или иногда возвращать другое значение (доказательство 1, доказательство 2), чем то, что вы можете видеть в настройках вашего устройства.
Если вам нужно более полное и надежное решение, я собрал все возможные решения, которые я смог найти, за один шаг. Вот упрощенная версия этого:
public static String getSerialNumber() {
String serialNumber;
try {
Class<?> c = Class.forName("android.os.SystemProperties");
Method get = c.getMethod("get", String.class);
serialNumber = (String) get.invoke(c, "gsm.sn1");
if (serialNumber.equals(""))
serialNumber = (String) get.invoke(c, "ril.serialnumber");
if (serialNumber.equals(""))
serialNumber = (String) get.invoke(c, "ro.serialno");
if (serialNumber.equals(""))
serialNumber = (String) get.invoke(c, "sys.serialnumber");
if (serialNumber.equals(""))
serialNumber = Build.SERIAL;
// If none of the methods above worked
if (serialNumber.equals(""))
serialNumber = null;
} catch (Exception e) {
e.printStackTrace();
serialNumber = null;
}
return serialNumber;
}
Я стараюсь регулярно обновлять суть, когда я могу тестировать на новом устройстве или версии Android. Вклад также приветствуется.