Узнать модель телефона Android программно
Я хотел бы знать, если есть способ для чтения модели телефона программно в Android.
Я хотел бы получить строку, такую как HTC Dream, Milestone, Sapphire или что-то еще...
14 ответов:
на многих популярных устройствах рыночное название устройства недоступно. Например, на 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 One (M8)
Я использую следующий код, чтобы получить полное имя устройства. Он получает строки модели и производителя и объединяет их, если строка модели уже не содержит имя производителя (на некоторых телефонах это так):
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); } }
вот несколько примеров имен устройств, которые я получил от пользователей:
Samsung GT-S5830L
Motorola MB860
Sony Ericsson LT18i
LGE 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")
видимо, вам нужно использовать список из 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
следующие строки используются, когда вы хотите получить производителя, имя устройства и / или модель:
String manufacturer = Build.MANUFACTURER; String brand = Build.BRAND; String product = Build.PRODUCT; String model = Build.MODEL;
String deviceName = android.os.Build.MODEL; // returns model name String deviceManufacturer = android.os.Build.MANUFACTURER; // returns manufacturer
вот мой код, чтобы получить производителя, фирменное наименование, версию ОС и уровень поддержки 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) } }
немного изменился код Idolons. Это будет заглавными словами при получении модели устройства.
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(); } }
имя телефона с
BluetoothAdapter
в случае, если телефон не поддерживает Bluetooth, то вы должны создать имя устройства
android.ОС.Построить класс
вот пример кода для получения имени телефона.
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; }