Je voudrais savoir s'il existe un moyen de lire le modèle de téléphone par programmation dans Android.
J'aimerais obtenir une chaîne comme HTC Dream, Milestone, Sapphire ou autre ...
Je voudrais savoir s'il existe un moyen de lire le modèle de téléphone par programmation dans Android.
J'aimerais obtenir une chaîne comme HTC Dream, Milestone, Sapphire ou autre ...
Réponses:
Sur de nombreux appareils populaires, le nom de marché de l'appareil n'est pas disponible. Par exemple, sur la valeur de la Samsung Galaxy S6 Build.MODEL
pourrait être "SM-G920F"
, "SM-G920I"
ou "SM-G920W8"
.
J'ai créé une petite bibliothèque qui obtient le nom du marché (convivial pour les consommateurs) d'un appareil. Il obtient le nom correct de plus de 10 000 appareils et est constamment mis à jour. Si vous souhaitez utiliser ma bibliothèque, cliquez sur le lien ci-dessous:
Si vous ne souhaitez pas utiliser la bibliothèque ci-dessus, alors c'est la meilleure solution pour obtenir un nom d'appareil 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)
getDeviceName()
? Si cela ne vous donne pas les résultats que vous recherchez, il n'y a pas de meilleure solution que je sache.
J'utilise le code suivant pour obtenir le nom complet de l'appareil. Il obtient 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, il le fait):
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 obtenus des utilisateurs:
Samsung GT-S5830L
Motorola MB860
Sony Ericsson LT18i
LGE LG-P500
HTC Desire V
HTC Wildfire S A510e
…
Oui: Build.MODEL .
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
String name = Build.MANUFACTURER + " - " + Build.MODEL
c'était la combinaison la plus utile. Build.PRODUCT utilise parfois un nom inattendu. Par exemple, sur le Galaxy Nexus, il renvoie "takgu". Build.MODEL, d'autre part, est la valeur accessible à l'utilisateur affichée sous Paramètres-> À propos du téléphone-> Numéro de modèle.
Pour qui qui cherche la liste complète des propriétés d' Build
ici est 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 lister ces propriétés pour votre appareil en mode débogage en utilisant la boîte de dialogue "évaluer l'expression" en utilisant 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
Utilisez la méthode suivante pour obtenir le modèle et le fabricant par programme
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);
}
Les chaînes suivantes sont toutes utiles lorsque vous souhaitez récupérer le fabricant, le nom de l'appareil et / ou le modèle:
String manufacturer = Build.MANUFACTURER;
String brand = Build.BRAND;
String product = Build.PRODUCT;
String model = Build.MODEL;
Apparemment, vous devez utiliser la liste de Google à https://support.google.com/googleplay/answer/1727131
Les API ne renvoient rien de ce que j'attends ou quoi que ce soit dans les paramètres. Pour mon Motorola X, c'est ce que j'obtiens
Build.MODEL = "XT1053"
Build.BRAND = "motorola"
Build.PRODUCT = "ghost"
Aller à la page mentionnée ci-dessus mappe "fantôme" vers Moto X. On dirait que cela pourrait être un peu plus simple ...
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
Voici mon code, pour obtenir le fabricant, le nom de la marque, la version d'Os et le niveau d'API de support
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;
}
Production:
System.out: button press on device name = Lava Alfa L iris(5.0) API-21
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)
}
}
capitalize
stackoverflow.com
Code Idolons modifié un peu. Cela mettra des mots en majuscule lors de l'obtention du modèle d'appareil.
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();
}
}
Build.DEVICE // The name of the industrial design.
Build.DEVICE Donne le nom lisible par l'homme pour certains appareils queBuild.MODEL
Build.DEVICE = OnePlus6
Build.MANUFACTURER = OnePlus
Build.MODEL = ONEPLUS A6003
Vous pouvez obtenir le nom de l'appareil téléphonique
BluetoothAdapter
Dans le cas où 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 de l'appareil 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;
}
Vous pouvez essayer la fonction suivante et renvoyer le nom de votre téléphone au format de chaîne.
public String phoneModel() {
return Build.MODEL;
}