Obtener Android modelo del teléfono mediante programación
-
22-09-2019 - |
Pregunta
Me gustaría saber si hay una manera de leer el modelo de teléfono mediante programación en Android.
Me gustaría conseguir una cadena como HTC Dream, Milestone, zafiro o lo que sea ...
Solución
En muchos dispositivos populares el nombre de mercado de un producto 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"
.
He creado una pequeña biblioteca que obtiene el (el consumidor) el nombre de mercado de un dispositivo. Se pone el nombre correcto de más de 10.000 dispositivos y se actualiza constantemente. Si desea utilizar mi biblioteca, haga clic en el siguiente enlace:
AndroidDeviceNames Biblioteca en Github
Si no desea utilizar la biblioteca de arriba, entonces esta es la mejor solución para conseguir un nombre de dispositivo accesible 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());
Resultados:
HTC6525LVW
HTC One (M8)
Otros consejos
Yo uso el siguiente código para obtener el nombre completo del dispositivo. Se pone fabricantes y modelos de cuerdas y concatena a menos que la cadena modelo que ya contiene el nombre del fabricante (en algunos teléfonos que 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í están algunos ejemplos de nombres de dispositivo 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. Que le puede dar Modelo (los números en algún momento).
Le dará el fabricante del teléfono (HTC parte de su solicitud):
Build.MANUFACTURER
En el nombre del producto:
Build.PRODUCT
Para quienes que buscan la lista completa de propiedades de Build
aquí es un ejemplo para Sony Z1 compacto:
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 fácilmente la lista de esas propiedades para su dispositivo en modo de depuración utilizando "evaluar la expresión" diálogo mediante 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
Utilice el método Tras llegar modelo y el fabricante de programación
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);
}
Las siguientes cadenas son de uso cuando se desea recuperar 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;
Al parecer, es necesario utilizar la lista de Google en https://support.google.com/googleplay/answer/1727131
Las API no devuelve nada espero ni nada en la configuración. Por mi Motorola X esto es lo que me pasa
Build.MODEL = "XT1053"
Build.BRAND = "motorola"
Build.PRODUCT = "ghost"
El ir a la página mencionado anteriormente "fantasma" se asigna a Moto X. Parece que esto podría ser un poco más simple ...
Puede utilizar el siguiente código para obtener el nombre de la marca y modelo de la marca del dispositivo.
String brand = Build.BRAND; // for getting BrandName
String model = Build.MODEL; // for getting Model of the device
Aquí está mi código, Para llegar fabricante, marca, versión del SO y soporte API Nivel
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 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)
}
}
Se ha cambiado el código Idolons un poco. Este capitalizará palabras al conseguir el modelo de 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();
}
}
Usted puede obtener el nombre del dispositivo de teléfono de la
BluetoothAdapter
En el caso de teléfono no es compatible con Bluetooth, entonces usted tiene que construir el nombre del dispositivo
clase android.os.Build
Aquí está el código de ejemplo para obtener el nombre del dispositivo móvil.
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 Trate siguiente función y su retorno a su nombre PhoneModel en formato de cadena.
public String phoneModel() {
return Build.MODEL;
}