Подтвердить что ты не робот

Android: как программно получить доступ к серийному номеру устройства, указанному в AVD-менеджере (API версии 8)

Как программно получить доступ к значению, показанному на изображении ниже?

enter image description here

4b9b3361

Ответ 1

Это серийный номер оборудования. Чтобы получить доступ к нему на

  • 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 возвращают действительные серийные номера.

Это уникально для любого устройства. Если вы ищете возможности получить/использовать уникальный идентификатор устройства, вы должны прочитать здесь.

Для решения, включающего отражение без разрешения, смотрите этот ответ.

Ответ 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. Вклад также приветствуется.