Android: как программно получить доступ к серийному номеру устройства, указанному в AVD-менеджере (API версии 8)
Как программно получить доступ к значению, показанному на изображении ниже?
![enter image description here]()
Ответы
Ответ 1
Это серийный номер оборудования. Чтобы получить доступ к нему на
Это уникально для любого устройства. Если вы ищете возможности получить/использовать уникальный идентификатор устройства, вы должны прочитать здесь.
Для решения, включающего отражение без разрешения, смотрите этот ответ.
Ответ 2
До 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()
Ответ 3
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. Вклад также приветствуется.