Мені хотілося б дізнатися, чи існує спосіб програмного читання моделі телефону в Android.
Я хотів би отримати такий рядок, як HTC Dream, Milestone, Sapphire або що завгодно ...
Мені хотілося б дізнатися, чи існує спосіб програмного читання моделі телефону в Android.
Я хотів би отримати такий рядок, як HTC Dream, Milestone, Sapphire або що завгодно ...
Відповіді:
На багатьох популярних пристроях ринкова назва пристрою недоступна. Наприклад, на Samsung Galaxy S6 значення Build.MODEL
може бути "SM-G920F"
, "SM-G920I"
або "SM-G920W8"
.
Я створив невелику бібліотеку, яка отримує ринкову (споживацьку) назву пристрою. Він отримує правильну назву для понад 10 000 пристроїв і постійно оновлюється. Якщо ви хочете використовувати мою бібліотеку, натисніть посилання нижче:
Якщо ви не хочете користуватися бібліотекою вище, то це найкраще рішення для отримання зручного імені пристрою:
/** 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)
getDeviceName()
? Якщо це не дає результатів, яких ви шукаєте, немає кращого рішення, про яке я знаю.
Я використовую наступний код, щоб отримати повне ім’я пристрою. Він отримує рядки моделі та виробника та з'єднує їх, якщо рядки моделі вже не містять назву виробника (на деяких телефонах це є):
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
…
Так: Build.MODEL .
Насправді це не на 100% правильно. Це може дати вам Модель (колись номери).
Ви отримаєте Виробника телефону (частина Вашого запиту HTC):
Build.MANUFACTURER
Для назви продукту:
Build.PRODUCT
String name = Build.MANUFACTURER + " - " + Build.MODEL
це найкорисніше поєднання. Build.PRODUCT іноді використовує несподіване ім’я. Наприклад, на Galaxy Nexus він повертає "такгу". З іншого боку, Build.MODEL - це орієнтоване на користувача значення, яке відображається у розділі Налаштування-> Про телефон-> Номер моделі.
Для тих, хто шукає повний перелік властивостей 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)
}
}
capitalize
stackoverflow.com/a/59158474/1446466
Трохи змінили код 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();
}
}
Build.DEVICE // The name of the industrial design.
Build.DEVICE Дає читабельну людині назву для деяких пристроїв, ніжBuild.MODEL
Build.DEVICE = OnePlus6
Build.MANUFACTURER = OnePlus
Build.MODEL = ONEPLUS A6003
Ім'я пристрою телефону можна отримати у
BluetoothAdapter
Якщо телефон не підтримує 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;
}