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 ...
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:
Su molti dispositivi popolari il nome commerciale del dispositivo non è disponibile. Per esempio, sul Samsung Galaxy S6 il valore Build.MODEL
potrebbe 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:
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)
getDeviceName()
? Se ciò non ti dà i risultati che stai cercando, non c'è una soluzione migliore che io conosca.
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
…
Sì: Build.MODEL .
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
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.
Per chi cerca l'elenco completo delle proprietà di Build
questo è 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")
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);
}
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 ...
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
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
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)
}
}
capitalize
Kotlin.com/a/59158474/1446466
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();
}
}
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
È 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;
}
Puoi provare a seguire la funzione e restituire il tuo telefono Nome del modello in formato stringa.
public String phoneModel() {
return Build.MODEL;
}