web-dev-qa-db-fra.com

Obtenir un modèle de téléphone Android par programmation

J'aimerais savoir s'il existe un moyen de lire le modèle de téléphone par programmation dans Android.

Je voudrais un string comme HTC Dream, Milestone, Sapphire ou autre chose ...

291
Andrea Baccega

Sur de nombreux appareils populaires, le nom commercial de l'appareil n'est pas disponible. Par exemple, sur le Samsung Galaxy S6, la valeur de Build.MODEL pourrait être "SM-G920F", "SM-G920I" ou "SM-G920W8".

J'ai créé une petite bibliothèque qui obtient le nom du périphérique (convivial). Il obtient le nom correct pour plus de 10 000 périphériques et est mis à jour en permanence. Si vous souhaitez utiliser ma bibliothèque, cliquez sur le lien ci-dessous:

Bibliothèque AndroidDeviceNames sur Github


Si vous ne souhaitez pas utiliser la bibliothèque ci-dessus, c'est la meilleure solution pour obtenir un nom de périphérique convivial:

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

Exemple de mon Verizon HTC One M8:

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

Résultat:

HTC6525LVW 

HTC One (M8)

261
Jared Rummler

J'utilise le code suivant pour obtenir le nom complet du périphérique. Il récupère les chaînes de modèle et de fabricant et les concatène sauf si la chaîne de modèle contient déjà le nom du fabricant (sur certains téléphones, par exemple):

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

 

Voici quelques exemples de noms d'appareils que j'ai reçus des utilisateurs:

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

398
Idolon
111
Mirko N.

En fait, ce n’est pas correct à 100%. Cela peut vous donner un modèle (parfois des nombres).
Vous obtiendrez le fabricant du téléphone (partie HTC de votre demande):

 Build.MANUFACTURER

Pour un nom de produit:

 Build.PRODUCT
31
Falcon165o

Pour qui cherche une liste complète des propriétés de Build, voici un exemple pour 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

Vous pouvez facilement répertorier ces propriétés pour votre périphérique en mode débogage à l'aide du dialogue "évaluer l'expression" à l'aide de kotlin:

Android.os.Build::class.Java.fields.map { "Build.${it.name} = ${it.get(it.name)}"}.joinToString("\n")
17
ruX

Il semble que vous deviez utiliser la liste de Google à l'adresse https://support.google.com/googleplay/answer/1727131

Les API ne renvoient rien de ce que j'attends ni rien dans les paramètres. Pour mon Motorola X c'est ce que je reçois 

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

Aller à la page mentionnée ci-dessus "fantôme" mappe à Moto X. On dirait que cela pourrait être un peu plus simple ...

8
Edwin Evans
String deviceName = Android.os.Build.MODEL; // returns model name 

String deviceManufacturer = Android.os.Build.MANUFACTURER; // returns manufacturer
8
Ajay Pandya

Les chaînes suivantes sont toutes utiles lorsque vous souhaitez récupérer le fabricant, le nom du périphérique et/ou le modèle:

String manufacturer = Build.MANUFACTURER;
String brand        = Build.BRAND;
String product      = Build.PRODUCT;
String model        = Build.MODEL;
8
silkfire

vous pouvez utiliser le code suivant pour obtenir le nom de marque et le modèle de marque de l'appareil.

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

Voici mon code, Pour obtenir le fabricant, le nom de marque, la version de l’OS et le support API Level 

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

Sortie:

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

Version 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)
    }
}
2
Francisco Pereira

Vous pouvez obtenir le nom du périphérique téléphonique à partir du 

BluetoothAdapter

Si le téléphone ne prend pas en charge Bluetooth, vous devez créer le nom de l'appareil à partir de 

Classe Android.os.Build

Voici l'exemple de code pour obtenir le nom du périphérique téléphonique.

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;
}
1
Sridhar Nalam

Idolons modifiés un peu code. Cela capitalisera les mots lors de l’obtention du modèle de périphérique.

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