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 ...

¿Fue útil?

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
  ...

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;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top