Obtenga el modelo de teléfono Android mediante progtwigción

Me gustaría saber si hay una forma de leer programáticamente el modelo de teléfono en Android.

Me gustaría obtener una cadena como HTC Dream, Milestone, Sapphire o lo que sea …

En muchos dispositivos populares, el nombre comercial del dispositivo no está disponible. Por ejemplo, en el Samsung Galaxy S6, el valor de Build.MODEL podría ser "SM-G920F" , "SM-G920I" o "SM-G920W8" .

Creé una pequeña biblioteca que obtiene el nombre de mercado de un dispositivo (amigable para el consumidor). Recibe el nombre correcto para más de 10,000 dispositivos y se actualiza constantemente. Si desea usar mi biblioteca, haga clic en el siguiente enlace:

AndroidDeviceNames Library en Github


Si no desea utilizar la biblioteca de arriba, esta es la mejor solución para obtener un nombre de dispositivo amigable para el consumidor:

 /** 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(); } 

Ejemplo de mi Verizon HTC One M8:

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

Resultado:

HTC6525LVW

HTC One (M8)

Uso el siguiente código para obtener el nombre completo del dispositivo. Obtiene cadenas de modelo y fabricante y las concatena a menos que la cadena del modelo ya contenga el nombre del fabricante (en algunos teléfonos lo hace):

 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); } } 

Aquí hay algunos ejemplos de nombres de dispositivos que obtuve de los usuarios:

Samsung GT-S5830L
Motorola MB860
Sony Ericsson LT18i
LGE LG-P500
HTC Desire V
HTC Wildfire S A510e

Sí: Build.MODEL .

En realidad, eso no es 100% correcto. Eso puede darte Modelo (en algún momento números).
Le conseguirá el fabricante del teléfono (parte HTC de su solicitud):

  Build.MANUFACTURER 

Para un nombre de producto:

  Build.PRODUCT 

Para quienes buscan la lista completa de propiedades de Build aquí, hay un ejemplo para 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 

Puede enumerar fácilmente esas propiedades para su dispositivo en modo de depuración usando el diálogo “evaluar expresión” usando kotlin:

 android.os.Build::class.java.fields.map { "Build.${it.name} = ${it.get(it.name)}"}.joinToString("\n") 

Aparentemente, debes usar la lista de Google en https://support.google.com/googleplay/answer/1727131

Las API no devuelven nada ni nada en la Configuración. Para mi Motorola X esto es lo que obtengo

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

Yendo a la página mencionada anteriormente, “fantasma” se asigna a Moto X. Parece que esto podría ser un poco más simple …

puede usar el siguiente código para obtener la marca y el modelo de marca del dispositivo.

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

Las siguientes cadenas son todas de uso cuando desea recuperar el fabricante, el nombre del dispositivo y / o el modelo:

 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 

Aquí está mi código, para obtener el fabricante, la marca, la versión de Os y el nivel de API de soporte

 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; } 

Salida:

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

Versión de Kotlin

 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) } } 

Cambié el código de Idolons un poco. Esto capitalizará las palabras al obtener el modelo del dispositivo.

 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(); } } 

Puede obtener el nombre del dispositivo del teléfono del

Adaptador Bluetooth

En caso de que el teléfono no admita Bluetooth, debe construir el nombre del dispositivo desde

Clase android.os.Build

Aquí está el código de muestra para obtener el nombre del dispositivo del teléfono.

 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; } 

Puede probar la siguiente función y devolver el nombre de su modelo de teléfono en formato de cadena.

 public String phoneModel() { return Build.MODEL; }