Вопрос

Я хотел бы знать, есть ли способ программного считывания модели телефона в Android.

Я хотел бы получить строку типа HTC Dream, Milestone, Sapphire или что-то еще...

Это было полезно?

Решение

На многих популярных устройствах торговое название устройства недоступно.Например, на Samsung Galaxy S6 значение Build.MODEL может быть "SM-G920F", "SM-G920I", или "SM-G920W8".

Я создал небольшую библиотеку, которая получает рыночное (удобное для потребителя) название устройства.Он получает правильное имя для более 10 000 устройств и постоянно обновляется.Если вы хотите использовать мою библиотеку, нажмите на ссылку ниже:

Библиотека AndroidDeviceNames на Github


Если вы не хотите использовать приведенную выше библиотеку, то это лучшее решение для получения удобного для потребителя имени устройства:

/** Returns the consumer friendly device name */
public static String getDeviceName() {
  String manufacturer = Build.MANUFACTURER;
  String model = Build.MODEL;
  if (model.startsWith(manufacturer)) {
    return capitalize(model);
  }
  return capitalize(manufacturer) + " " + model;
}

private static String capitalize(String str) {
  if (TextUtils.isEmpty(str)) {
    return str;
  }
  char[] arr = str.toCharArray();
  boolean capitalizeNext = true;

  StringBuilder phrase = new StringBuilder();
  for (char c : arr) {
    if (capitalizeNext && Character.isLetter(c)) {
      phrase.append(Character.toUpperCase(c));
      capitalizeNext = false;
      continue;
    } else if (Character.isWhitespace(c)) {
      capitalizeNext = true;
    }
    phrase.append(c);
  }

  return phrase.toString();
}

Пример моего Verizon HTC One M8:

// using method from above
System.out.println(getDeviceName());
// Using https://github.com/jaredrummler/AndroidDeviceNames
System.out.println(DeviceName.getDeviceName());

Результат:

HTC6525LVW

HTC Один (М8)

Другие советы

Я использую следующий код, чтобы получить полное имя устройства.Он получает строки модели и производителя и объединяет их, если строка модели уже не содержит название производителя (на некоторых телефонах оно есть):

public String getDeviceName() {
    String manufacturer = Build.MANUFACTURER;
    String model = Build.MODEL;
    if (model.toLowerCase().startsWith(manufacturer.toLowerCase())) {
        return capitalize(model);
    } else {
        return capitalize(manufacturer) + " " + model;
    }
}


private String capitalize(String s) {
    if (s == null || s.length() == 0) {
        return "";
    }
    char first = s.charAt(0);
    if (Character.isUpperCase(first)) {
        return s;
    } else {
        return Character.toUpperCase(first) + s.substring(1);
    }
} 

 

Вот несколько примеров названий устройств, которые я получил от пользователей:

Самсунг GT-S5830L
Моторола МБ860
Сони Эрикссон LT18i
LG-LG-P500
HTC Desire V
HTC Wildfire S A510e

На самом деле это не на 100% верно.Это может дать вам модель (иногда цифры).
Укажите производителя телефона (часть вашего запроса от HTC):

 Build.MANUFACTURER

Для названия продукта:

 Build.PRODUCT

Для кого кто ищет полный список объектов недвижимости Build вот пример для Sony Z1 Compact:

Build.BOARD = MSM8974
Build.BOOTLOADER = s1
Build.BRAND = Sony
Build.CPU_ABI = armeabi-v7a
Build.CPU_ABI2 = armeabi
Build.DEVICE = D5503
Build.DISPLAY = 14.6.A.1.236
Build.FINGERPRINT = Sony/D5503/D5503:5.1.1/14.6.A.1.236/2031203XXX:user/release-keys
Build.HARDWARE = qcom
Build.HOST = BuildHost
Build.ID = 14.6.A.1.236
Build.IS_DEBUGGABLE = false
Build.MANUFACTURER = Sony
Build.MODEL = D5503
Build.PRODUCT = D5503
Build.RADIO = unknown
Build.SERIAL = CB5A1YGVMT
Build.SUPPORTED_32_BIT_ABIS = [Ljava.lang.String;@3dd90541
Build.SUPPORTED_64_BIT_ABIS = [Ljava.lang.String;@1da4fc3
Build.SUPPORTED_ABIS = [Ljava.lang.String;@525f635
Build.TAGS = release-keys
Build.TIME = 144792559XXXX
Build.TYPE = user
Build.UNKNOWN = unknown
Build.USER = BuildUser

Вы можете легко перечислить эти свойства для вашего устройства в режиме отладки, используя диалоговое окно «оценить выражение», используя kotlin:

android.os.Build::class.java.fields.map { "Build.${it.name} = ${it.get(it.name)}"}.joinToString("\n")
String deviceName = android.os.Build.MODEL; // returns model name 

String deviceManufacturer = android.os.Build.MANUFACTURER; // returns manufacturer

Используйте следующий метод, чтобы программно получить модель и производителя.

  public String getDeviceName() {
        String manufacturer = Build.MANUFACTURER;
        String model = Build.MODEL;
        if (model.toLowerCase().startsWith(manufacturer.toLowerCase())) {
            return capitalize(model);
        } else {
            return capitalize(manufacturer) + " " + model;
        }
    }


    private String capitalize(String s) {
    if (s == null || s.length() == 0) {
        return "";
    }
    char first = s.charAt(0);
    if (Character.isUpperCase(first)) {
        return s;
    } else {
        return Character.toUpperCase(first) + s.substring(1);
    }

Следующие строки можно использовать, если вы хотите получить информацию о производителе, названии устройства и/или модели:

String manufacturer = Build.MANUFACTURER;
String brand        = Build.BRAND;
String product      = Build.PRODUCT;
String model        = Build.MODEL;

Видимо нужно воспользоваться списком от Google по адресу https://support.google.com/googleplay/answer/1727131

API не возвращают ничего, что я ожидал, или ничего в настройках.Для моей Motorola X это то, что я получаю

   Build.MODEL = "XT1053"
   Build.BRAND = "motorola"
   Build.PRODUCT = "ghost"

Собираться в страница упомянутые выше «призрачные» карты для Moto X.Кажется, все могло бы быть немного проще...

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

 String brand = Build.BRAND; // for getting BrandName
 String model = Build.MODEL; // for getting Model of the device

Вот мой код, чтобы узнать производителя, торговую марку, версию ОС и уровень поддержки API.

String manufacturer = Build.MANUFACTURER;

String model = Build.MODEL + " " + android.os.Build.BRAND +" ("
           + android.os.Build.VERSION.RELEASE+")"
           + " API-" + android.os.Build.VERSION.SDK_INT;

if (model.startsWith(manufacturer)) {
    return capitalize(model);
} else {
    return capitalize(manufacturer) + " " + model;
}

Выход:

System.out: button press on device name = Lava Alfa L iris(5.0) API-21

Котлин-версия

val Name: String by lazy {
    val manufacturer = Build.MANUFACTURER
    val model = Build.MODEL
    if (model.toLowerCase().startsWith(manufacturer.toLowerCase())) {
        capitalize(model)
    } else {
        capitalize(manufacturer) + " " + model
    }
}

private fun capitalize(s: String?): String {
    if (s == null || s.isEmpty()) {
        return ""
    }
    val first = s[0]
    return if (Character.isUpperCase(first)) {
        s
    } else {
        Character.toUpperCase(first) + s.substring(1)
    }
}

Немного изменил код Идолонов.При получении модели устройства слова будут писаться с заглавной буквы.

public static String getDeviceName() {
    final String manufacturer = Build.MANUFACTURER, model = Build.MODEL;
    return model.startsWith(manufacturer) ? capitalizePhrase(model) : capitalizePhrase(manufacturer) + " " + model;
}

private static String capitalizePhrase(String s) {
    if (s == null || s.length() == 0)
        return s;
    else {
        StringBuilder phrase = new StringBuilder();
        boolean next = true;
        for (char c : s.toCharArray()) {
            if (next && Character.isLetter(c) || Character.isWhitespace(c))
                next = Character.isWhitespace(c = Character.toUpperCase(c));
            phrase.append(c);
        }
        return phrase.toString();
    }
}

Вы можете получить имя устройства телефона из

BluetoothАдаптер

Если телефон не поддерживает Bluetooth, вам необходимо создать имя устройства из

android.os.Build класс

Вот пример кода для получения имени телефонного устройства.

public String getPhoneDeviceName() {  
        String name=null;
        // Try to take Bluetooth name
        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
        if (adapter != null) {
            name = adapter.getName();
        }

        // If not found, use MODEL name
        if (TextUtils.isEmpty(name)) {
            String manufacturer = Build.MANUFACTURER;
            String model = Build.MODEL;
            if (model.startsWith(manufacturer)) {
                name = model;
            } else {
                name = manufacturer + " " + model;
            }
        } 
        return name;
}

Вы можете попробовать следующую функцию и вернуть имя вашей модели телефона в строковом формате.

public String phoneModel() {

    return Build.MODEL;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top