Ottieni il modello di telefono Android a livello di codice


355

Vorrei sapere se esiste un modo per leggere il modello di telefono in modo programmatico su Android.

Vorrei ottenere una stringa come HTC Dream, Milestone, Sapphire o qualsiasi altra cosa ...

Risposte:


328

Su molti dispositivi popolari il nome commerciale del dispositivo non è disponibile. Per esempio, sul Samsung Galaxy S6 il valore Build.MODELpotrebbe essere "SM-G920F", "SM-G920I"o"SM-G920W8" .

Ho creato una piccola libreria che ottiene il nome di mercato di un dispositivo. Ottiene il nome corretto per oltre 10.000 dispositivi e viene costantemente aggiornato. Se desideri utilizzare la mia biblioteca, fai clic sul link in basso:

Libreria AndroidDeviceNames su Github


Se non si desidera utilizzare la libreria sopra, questa è la soluzione migliore per ottenere un nome dispositivo adatto al consumatore:

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

Esempio dal mio HTC One M8 Verizon:

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

Risultato:

HTC6525LVW

HTC One (M8)


19
Grazie Jared. Ne avevo bisogno oggi, ma per Xamarin.Android ha tradotto il tuo file in C #. Se qualcun altro ne ha bisogno, puoi trovarlo qui. gist.github.com/mohibsheth/5e1b361ae49c257b8caf
Mohib Sheth

1
C'è un modo per ottenere il nome devic "leggibile dall'uomo" come "Xperia Z3" o "Galaxy S3" senza questa classe di dispositivi? Non mi piace usare un elenco statico di tutti i dispositivi per essere sicuro che anche tutti i dispositivi futuri saranno supportati.
Radon8472,

1
@ Radon8472 Hai provato il metodo statico di fabbrica sopra indicato getDeviceName()? Se ciò non ti dà i risultati che stai cercando, non c'è una soluzione migliore che io conosca.
Jared Rummler,

@Jared: ho già un nome devic come i risultati di 'getDeviceName ()' ma mi piace mostrare il nome che gli utenti conoscono dai loro negozi a portata di mano :(
Radon8472

1
Ciao a tutti ho scritto un modulo angolare per questo chiamato ng-fone usando la lista di Jared. Il link seguente fornisce istruzioni su come usarlo. tphangout.com/?p=83
Raja Yogan

427

Uso il seguente codice per ottenere il nome completo del dispositivo. Ottiene le stringhe del modello e del produttore e le concatena a meno che la stringa del modello non contenga già il nome del produttore (su alcuni telefoni):

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

 

Ecco alcuni esempi di nomi di dispositivi che ho ricevuto dagli utenti:

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


C'è un elenco da qualche parte che contiene tutte le possibili risposte che puoi ottenere dal telefono. Di 'se hai bisogno di reindirizzare un utente su come installare qualcosa su un tipo di telefono specifico o vendere qualcosa a un modello specifico.
evilfish,

7
@evilfish Prova questo elenco da Google: support.google.com/googleplay/answer/1727131
Idolon

Funziona perfettamente sull'orologio perché ne avevo bisogno per Android Wear.
Wahib Ul Haq,

116

Sì: Build.MODEL .


Mi dà sempre "Android SDK costruito per x86" quando lo provo con l'emulatore. Impossibile ottenere il nome del modello specificatamente nell'esecuzione dell'emulatore con un nome di modello diverso.
Swathi,

Sì, questo è il modello dell'emulatore. Si noti che utilizza anche un nome simile per la memoria interna.
Cool Guy CG

34

In realtà questo non è corretto al 100%. Questo può darti Modello (a volte numeri).
Riceverai il produttore del telefono (parte HTC della tua richiesta):

 Build.MANUFACTURER

Per un nome di prodotto:

 Build.PRODUCT

8
Ho scoperto che String name = Build.MANUFACTURER + " - " + Build.MODELè la combinazione più utile. Build.PRODUCT a volte utilizza un nome imprevisto. Ad esempio, sul Galaxy Nexus, restituisce "takgu". Build.MODEL, d'altra parte, è il valore rivolto all'utente visualizzato in Impostazioni-> Informazioni sul telefono-> Numero modello.
Mike Ortiz,

1
Molto dipende dal produttore; I dispositivi HTC (Evo 4G, 4G LTE, 3D e Slide) utilizzano quanto sopra indicato.
Falcon165o

AXON 7 mini è nella lista. Ma dov'è AXON di dimensioni regolari?
Serge,

30

Per chi cerca l'elenco completo delle proprietà di Buildquesto è un esempio per 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

Puoi facilmente elencare quelle proprietà per il tuo dispositivo in modalità debug usando la finestra di dialogo "valuta espressione" usando kotlin:

android.os.Build::class.java.fields.map { "Build.${it.name} = ${it.get(it.name)}"}.joinToString("\n")

14
String deviceName = android.os.Build.MODEL; // returns model name 

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

Utilizzare il metodo seguente per ottenere il modello e il produttore a livello di codice

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

8

Le seguenti stringhe sono tutte utili quando si desidera recuperare il produttore, il nome del dispositivo e / o il modello:

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

8

Apparentemente è necessario utilizzare l'elenco di Google all'indirizzo https://support.google.com/googleplay/answer/1727131

Le API non restituiscono nulla che mi aspetto o nulla in Impostazioni. Per il mio Motorola X questo è quello che ottengo

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

Andare alla pagina sopra menzionata "fantasma" su Moto X. Sembra che questo potrebbe essere un po 'più semplice ...


AXON 7 mini è nella lista. Ma dov'è AXON di dimensioni regolari?
Serge,

7

puoi utilizzare il seguente codice per ottenere il nome commerciale e il modello commerciale del dispositivo.

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

3

Ecco il mio codice, per ottenere il produttore, il marchio, la versione Os e il livello API di supporto

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

Produzione:

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

3

Versione di 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)
    }
}

Ho pubblicato una versione più breve con stackoverflow di capitalize Kotlin.com/a/59158474/1446466
Sean

1

Codice Idolons modificato un po '. Questo renderà maiuscole le parole quando si ottiene il modello 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();
    }
}

1

Kotlin versione corta:

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

fun getDeviceName(): String =
    (if (MODEL.startsWith(MANUFACTURER, ignoreCase = true)) {
        MODEL
    } else {
        "$MANUFACTURER $MODEL"
    }).capitalize()

1
Build.DEVICE // The name of the industrial design.

Build.DEVICE Fornisce il nome leggibile per alcuni dispositivi rispetto aBuild.MODEL

Build.DEVICE = OnePlus6
Build.MANUFACTURER = OnePlus
Build.MODEL = ONEPLUS A6003

0

È possibile ottenere il nome del dispositivo telefonico dal

BluetoothAdapter

Nel caso in cui il telefono non supporti il ​​Bluetooth, devi costruire il nome del dispositivo da

classe android.os.Build

Ecco il codice di esempio per ottenere il nome del dispositivo telefonico.

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

2
GRAZIE!! Si noti che è necessario il permesso BLUETOOTH per farlo funzionare.
user2923322

-4

Puoi provare a seguire la funzione e restituire il tuo telefono Nome del modello in formato stringa.

public String phoneModel() {

    return Build.MODEL;
}

Questa risposta non migliora su nessuna delle altre risposte che hanno detto la stessa cosa e sono state lasciate qui un anno fa.
Lynn che si sbriciola il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.