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

355

Me gustaría saber si hay una manera de leer el modelo de teléfono mediante programación en Android.

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

Andrea Baccega
fuente

Respuestas:

328

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

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

Biblioteca AndroidDeviceNames en Github


Si no desea utilizar la biblioteca anterior, 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)

Jared Rummler
fuente
19
Gracias Jared Necesitaba esto hoy, pero para Xamarin.Android tradujo su archivo a C #. Si alguien más lo necesita, puede encontrarlo aquí. gist.github.com/mohibsheth/5e1b361ae49c257b8caf
Mohib Sheth
1
¿Hay alguna manera de obtener el nombre de dispositivo "legible para humanos" como "Xperia Z3" o "Galaxy S3" sin esta clase de dispositivos? No me gusta usar una lista estática de todos los dispositivos para asegurarme de que incluso todos los dispositivos futuros sean compatibles.
Radon8472
1
@ Radon8472 ¿Has probado el método de fábrica estático mencionado anteriormente getDeviceName()? Si eso no le da los resultados que está buscando, no hay una mejor solución que yo sepa.
Jared Rummler
@Jared: Ya tengo un nombre de dispositivo como los resultados de 'getDeviceName ()' pero me gusta mostrar el nombre que los usuarios finales conocen de sus tiendas útiles :(
Radon8472
1
Hola a todos, escribí un módulo angular para esto llamado ng-fone usando la lista de Jared. El siguiente enlace proporciona instrucciones sobre cómo usarlo. tphangout.com/?p=83
Raja Yogan
427

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

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

Ídolo
fuente
Hay una lista en algún lugar que contiene todas las respuestas posibles que puede obtener del teléfono. Diga si necesita redirigir a un usuario sobre cómo instalar algo en un tipo de teléfono específico o vender algo a un modelo específico.
evilfish
77
@evilfish Pruebe esta lista de Google: support.google.com/googleplay/answer/1727131
Idolon
Funciona perfectamente de servicio porque lo necesitaba para Android Wear.
Wahib Ul Haq
116

Sí: Build.MODEL .

Mirko N.
fuente
Siempre me da "Android SDK construido para x86" cuando lo intento con el emulador. No se puede obtener el nombre del modelo específicamente en el emulador ejecutado con un nombre de modelo diferente.
Swathi
Sí, ese es el modelo del emulador. Tenga en cuenta que incluso utiliza un nombre similar para el almacenamiento interno.
Cool Guy CG
34

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

 Build.MANUFACTURER

Para un nombre de producto:

 Build.PRODUCT
Falcon165o
fuente
8
He encontrado que esa String name = Build.MANUFACTURER + " - " + Build.MODELes la combinación más útil. Build.PRODUCT a veces usa un nombre inesperado. Por ejemplo, en el Galaxy Nexus, devuelve "takgu". Build.MODEL, por otro lado, es el valor orientado al usuario que se muestra en Configuración-> Acerca del teléfono-> Número de modelo.
Mike Ortiz
1
Mucho depende del fabricante; Los dispositivos HTC (Evo 4G, 4G LTE, 3D y Slide) usan lo que dije anteriormente.
Falcon165o
AXON 7 mini está en la lista. Sin embargo, ¿dónde se encuentra AXON de tamaño regular?
Serge
30

Para quienes buscan la lista completa de propiedades de Buildaquí es 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")
ruX
fuente
14
String deviceName = android.os.Build.MODEL; // returns model name 

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

Utilice el siguiente método para obtener el modelo y el fabricante mediante 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);
    }
Ajay Pandya
fuente
8

Las siguientes cadenas son todas útiles 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;
fuego de seda
fuente
8

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

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

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

Ir a la página mencionada anteriormente "fantasma" mapas de Moto X. Parece que esto podría ser un poco más simple ...

Edwin Evans
fuente
AXON 7 mini está en la lista. Sin embargo, ¿dónde está el AXON de tamaño regular?
Serge
7

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
RamakanthReddy
fuente
3

Aquí está mi código, para obtener el fabricante, la marca, la versión del sistema operativo 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
Saurabh Gaddelpalliwar
fuente
3

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)
    }
}
Francisco Pereira
fuente
He publicado una versión más corta con capitalize stackoverflow.com/a/59158474/1446466
Sean
1

Se modificó un poco el código de Idolons. 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();
    }
}
Xjasz
fuente
1

Versión corta de Kotlin:

import android.os.Build.MANUFACTURER
import android.os.Build.MODEL

fun getDeviceName(): String =
    (if (MODEL.startsWith(MANUFACTURER, ignoreCase = true)) {
        MODEL
    } else {
        "$MANUFACTURER $MODEL"
    }).capitalize()
Sean
fuente
1
Build.DEVICE // The name of the industrial design.

Build.DEVICE Da el nombre legible por humanos para algunos dispositivos queBuild.MODEL

Build.DEVICE = OnePlus6
Build.MANUFACTURER = OnePlus
Build.MODEL = ONEPLUS A6003
majurageerthan
fuente
0

Puede obtener el nombre del dispositivo del teléfono desde

Adaptador Bluetooth

En caso de que el teléfono no sea compatible con Bluetooth, debe construir el nombre del dispositivo a partir de

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;
}
Sridhar Nalam
fuente
2
¡¡GRACIAS!! Tenga en cuenta que se requiere el permiso BLUETOOTH para que esto funcione.
usuario2923322
-4

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;
}
Quantum4U
fuente
Esta respuesta no mejora en ninguna de las otras respuestas que decían lo mismo y se dejaron aquí hace un año.
Lynn se desmorona