Holen Sie sich Android Handy-Modell programmatisch
-
22-09-2019 - |
Frage
Ich möchte wissen, ob es einen Weg gibt, das Handy-Modell programmatisch in Android zu lesen.
Ich möchte eine Zeichenfolge wie HTC Dream bekommen, Milestone, Saphir oder was auch immer ...
Lösung
Auf vielen gängigen Geräten der Markt Name des Geräts ist nicht verfügbar. Zum Beispiel auf dem Samsung Galaxy S6 der Wert Build.MODEL
könnte "SM-G920F"
, "SM-G920I"
oder "SM-G920W8"
sein.
Ich habe eine kleine Bibliothek, die den Markt (verbraucherfreundlich) Name eines Geräts erhält. Es erhält den richtigen Namen für über 10.000 Geräte und wird ständig aktualisiert. Wenn Sie meine Bibliothek verwenden möchten, klicken Sie auf den unten stehenden Link:
AndroidDeviceNames Bibliothek auf Github
Wenn Sie nicht die Bibliothek oben verwenden wollen, dann ist dies die beste Lösung, die ein verbraucherfreundliche Gerätenamen für immer:
/** 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();
}
Beispiel von meinem Verizon HTC One M8:
// using method from above
System.out.println(getDeviceName());
// Using https://github.com/jaredrummler/AndroidDeviceNames
System.out.println(DeviceName.getDeviceName());
Ergebnis:
HTC6525LVW
HTC One (M8)
Andere Tipps
ich den folgenden Code verwenden, um die vollständigen Gerätenamen zu erhalten. Es wird Modell und Hersteller Strings und verkettet sie, es sei denn Modell Zeichenfolge bereits den Namen des Herstellers enthält (auf einigen Telefonen es tut):
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);
}
}
Hier sind ein paar Beispiele von Gerätenamen ich von den Benutzern bekommen:
Samsung GT-S5830L
Motorola MB860
Sony Ericsson LT18i
LGE LG-P500
HTC Desire V
HTC Wildfire S 510e
...
Ja. Build.MODEL
Eigentlich ist das nicht 100% richtig. Das kann Ihnen Model (irgendwann Zahlen).
Werden Sie den Hersteller des Telefons (HTC Teil Ihrer Anfrage) erhalten:
Build.MANUFACTURER
Für einen Produktnamen:
Build.PRODUCT
Für wen, die hier für die vollständige Liste der Eigenschaften von Build
sucht, ist ein Beispiel für das 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
Sie können ganz einfach diese Eigenschaften für Ihr Gerät im Debug-Modus Liste mit „Ausdruck auswerten“ Dialog Kotlin mit:
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
Verwenden Sie folgende Methode bekommen Modell & Hersteller programmatisch
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);
}
Die folgenden Strings sind alle Einsatz, wenn Sie Hersteller abrufen möchten, Name des Geräts und / oder das Modell:
String manufacturer = Build.MANUFACTURER;
String brand = Build.BRAND;
String product = Build.PRODUCT;
String model = Build.MODEL;
Anscheinend müssen Sie die Liste von Google verwenden unter https://support.google.com/googleplay/answer/1727131
Die APIs nicht zurück, was ich erwarten oder etwas in den Einstellungen. Für meine Motorola X ist das, was ich bekommen
Build.MODEL = "XT1053"
Build.BRAND = "motorola"
Build.PRODUCT = "ghost"
Gehen zum oben „Geist“ genannt Karten zu Moto X. Scheinen, wie dies ein bisschen sein könnte einfacher ...
können Sie den folgenden Code für das Erhalten der Markennamen verwenden und Marke Modell des Geräts.
String brand = Build.BRAND; // for getting BrandName
String model = Build.MODEL; // for getting Model of the device
Hier ist mein Code, Hersteller zu erhalten, Markenname, Version und Unterstützung API-Ebene
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;
}
Ausgang:
System.out: button press on device name = Lava Alfa L iris(5.0) API-21
Kotlin Version
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)
}
}
Changed Idolons Code ein wenig. Dies wird also profitieren, wenn das Gerätemodell zu bekommen.
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();
}
}
Sie können die Telefongerätenamen erhalten aus dem
Bluetoothadapter
Falls Telefon Bluetooth nicht unterstützt, dann muss man von den Gerätenamen konstruieren
android.os.Build Klasse
Hier ist der Beispielcode die Telefongerätenamen zu erhalten.
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;
}
können Sie versuchen, folgende Funktion und seine Rückkehr Ihren phoneModel Namen im String-Format.
public String phoneModel() {
return Build.MODEL;
}