Obtenez le modèle de téléphone Android par programmation

355

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

Andrea Baccega
la source

Réponses:

328

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.MODELpourrait ê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:

Bibliothèque AndroidDeviceNames sur Github


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)

Jared Rummler
la source
19
Merci Jared. J'en avais besoin aujourd'hui, mais pour Xamarin.Android, j'ai donc traduit votre fichier en C #. Si quelqu'un d'autre en a besoin, vous pouvez le trouver ici. gist.github.com/mohibsheth/5e1b361ae49c257b8caf
Mohib Sheth
1
Existe-t-il un moyen d'obtenir le nom de périphérique "lisible par l'homme" comme "Xperia Z3" ou "Galaxy S3" sans cette classe d'appareils? Je n'aime pas utiliser une liste statique de tous les appareils pour être sûr que même tous les futurs appareils seront pris en charge.
Radon8472
1
@ Radon8472 Avez-vous essayé la méthode d'usine statique nommée ci-dessus getDeviceName()? Si cela ne vous donne pas les résultats que vous recherchez, il n'y a pas de meilleure solution que je sache.
Jared Rummler
@Jared: J'ai déjà un nom de périphérique comme les résultats de 'getDeviceName ()' mais j'aime afficher le nom que les utilisateurs finaux connaissent de leurs magasins pratiques :(
Radon8472
1
Salut à tous J'ai écrit un module angulaire pour cela appelé ng-fone en utilisant la liste de Jared. Le lien ci-dessous donne des instructions sur la façon de l'utiliser. tphangout.com/?p=83
Raja Yogan
427

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

Idolon
la source
Il y a une liste quelque part qui contient toutes les réponses possibles que vous pouvez sortir du téléphone. Dites si vous devez rediriger un utilisateur sur la façon d'installer quelque chose sur un type de téléphone spécifique ou de vendre quelque chose à un modèle spécifique.
evilfish
7
@evilfish Essayez cette liste sur Google: support.google.com/googleplay/answer/1727131
Idolon
Fonctionne parfaitement sur la montre car j'en avais besoin pour Android Wear.
Wahib Ul Haq
116

Oui: Build.MODEL .

Mirko N.
la source
Il me donne toujours "Android SDK construit pour x86" lorsque je l'essaye avec l'émulateur. Impossible d'obtenir le nom du modèle spécifiquement dans l'exécution de l'émulateur avec un nom de modèle différent.
Swathi
Oui, c'est le modèle de l'émulateur. Notez qu'il utilise même un nom similaire pour le stockage interne.
Cool Guy CG
34

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
Falcon165o
la source
8
J'ai trouvé que String name = Build.MANUFACTURER + " - " + Build.MODELc'é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.
Mike Ortiz
1
Cela dépend en grande partie du fabricant; Les appareils HTC (Evo 4G, 4G LTE, 3D et Slide) utilisent ce que j'ai déclaré ci-dessus.
Falcon165o
AXON 7 mini est dans la liste. Pourtant, où est AXON de taille régulière?
Serge
30

Pour qui qui cherche la liste complète des propriétés d' Buildici 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")
ruX
la source
14
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);
    }
Ajay Pandya
la source
8

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;
feu de soie
la source
8

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

Edwin Evans
la source
AXON 7 mini est dans la liste. Pourtant, où est l'AXON de taille régulière?
Serge
7

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
RamakanthReddy
la source
3

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
Saurabh Gaddelpalliwar
la source
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)
    }
}
Francisco Pereira
la source
J'ai publié une version plus courte avec capitalize stackoverflow.com
Sean
1

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();
    }
}
Xjasz
la source
1

Version courte 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
la source
1
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
majurageerthan
la source
0

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;
}
Sridhar Nalam
la source
2
MERCI!! Notez que l'autorisation BLUETOOTH est requise pour que cela fonctionne.
user2923322
-4

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;
}
Quantum4U
la source
Cette réponse n'améliore aucune des autres réponses qui disaient la même chose et ont été laissées ici il y a un an.
Lynn Crumbling