Ich würde gerne wissen, ob es eine Möglichkeit gibt, das Telefonmodell unter Android programmatisch zu lesen.
Ich möchte eine Saite wie HTC Dream, Milestone, Sapphire oder was auch immer ...
Auf vielen gängigen Geräten ist der Marktname des Geräts nicht verfügbar. Beim Samsung Galaxy S6 könnte der Wert von Build.MODEL
beispielsweise "SM-G920F"
, "SM-G920I"
oder "SM-G920W8"
sein.
Ich habe eine kleine Bibliothek erstellt, die den marktüblichen (verbraucherfreundlichen) Namen eines Geräts erhält. Es erhält den korrekten Namen für über 10.000 -Geräte und wird ständig aktualisiert. Wenn Sie meine Bibliothek nutzen möchten, klicken Sie auf den folgenden Link:
Wenn Sie die obige Bibliothek nicht verwenden möchten, ist dies die beste Lösung, um einen verbraucherfreundlichen Gerätenamen zu erhalten:
/** 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)
Ich verwende den folgenden Code, um den vollständigen Gerätenamen zu erhalten. Es werden Modell- und Herstellerzeichenfolgen abgerufen und verkettet, es sei denn, Modellzeichenfolge enthält bereits den Herstellernamen (bei einigen Telefonen):
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 einige Beispiele von Gerätenamen, die ich von den Benutzern erhalten habe:
Samsung GT-S5830L
Motorola MB860
Sony Ericsson LT18i
LGE LG-P500
HTC Desire V
HTC Wildfire S A510e
…
Ja: Build.MODEL .
Eigentlich ist das nicht 100% korrekt. Das kann dir Modell geben (manchmal Zahlen).
Sie erhalten den Hersteller des Telefons (HTC-Teil Ihrer Anfrage):
Build.MANUFACTURER
Für einen Produktnamen:
Build.PRODUCT
Für wen, der eine vollständige Liste der Eigenschaften von Build
sucht, ist hier ein Beispiel für 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 diese Eigenschaften für Ihr Gerät im Debug-Modus mithilfe des Dialogfelds "Ausdruck" mit kotlin leicht auflisten:
Android.os.Build::class.Java.fields.map { "Build.${it.name} = ${it.get(it.name)}"}.joinToString("\n")
Anscheinend müssen Sie die Liste von Google unter https://support.google.com/googleplay/answer/1727131 verwenden.
Die APIs geben nichts zurück, was ich erwarte oder etwas in den Einstellungen. Für mein Motorola X bekomme ich das
Build.MODEL = "XT1053"
Build.BRAND = "Motorola"
Build.PRODUCT = "ghost"
Auf der page erwähnten "Geister" -Karten zu Moto X. Scheint so, könnte dies ein bisschen einfacher sein ...
String deviceName = Android.os.Build.MODEL; // returns model name
String deviceManufacturer = Android.os.Build.MANUFACTURER; // returns manufacturer
Die folgenden Zeichenfolgen können verwendet werden, wenn Sie Hersteller, Namen des Geräts und/oder Modell abrufen möchten:
String manufacturer = Build.MANUFACTURER;
String brand = Build.BRAND;
String product = Build.PRODUCT;
String model = Build.MODEL;
sie können den folgenden Code verwenden, um den Markennamen und das Markenmodell des Geräts zu erhalten.
String brand = Build.BRAND; // for getting BrandName
String model = Build.MODEL; // for getting Model of the device
Hier ist mein Code, Hersteller, Markenname, Os-Version und Support-API-Level
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;
}
Ausgabe:
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)
}
}
Sie können den Gerätenamen des Telefons von der erhalten
BluetoothAdapter
Falls das Telefon Bluetooth nicht unterstützt, müssen Sie den Gerätenamen aus erstellen
Android.os.Build-Klasse
Hier ist der Beispielcode, um den Gerätenamen des Telefons abzurufen.
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;
}
Idolons-Code ein wenig geändert. Dadurch werden Wörter groß geschrieben, wenn das Gerätemodell abgerufen wird.
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();
}
}