Ich würde gerne wissen, ob es eine Möglichkeit gibt, das Telefonmodell programmgesteuert in Android zu lesen.
Ich hätte gerne eine Saite wie HTC Dream, Milestone, Sapphire oder was auch immer ...
Ich würde gerne wissen, ob es eine Möglichkeit gibt, das Telefonmodell programmgesteuert in Android zu lesen.
Ich hätte gerne eine Saite wie HTC Dream, Milestone, Sapphire oder was auch immer ...
Antworten:
Auf vielen gängigen Geräten ist der Marktname des Geräts nicht verfügbar. Zum Beispiel auf dem Samsung Galaxy S6 der Wert Build.MODEL
sein könnte "SM-G920F"
, "SM-G920I"
oder "SM-G920W8"
.
Ich habe eine kleine Bibliothek erstellt, die den Marktnamen (verbraucherfreundlich) 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 oben genannte 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)
getDeviceName()
? Wenn das nicht zu den gewünschten Ergebnissen führt, gibt es keine bessere Lösung, die mir bekannt ist.
Ich verwende den folgenden Code, um den vollständigen Gerätenamen zu erhalten. Es werden Modell- und Herstellerzeichenfolgen abgerufen und verkettet, es sei denn, die Modellzeichenfolge enthält bereits den Herstellernamen (auf einigen Telefonen ist dies der Fall):
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 einige Beispiele für Gerätenamen, die ich von den Benutzern erhalten habe:
Samsung GT-S5830L
Motorola MB860
Sony Ericsson LT18i
LGE LG-P500
HTC Wunsch V
HTC Wildfire S A510e
…
Ja: Build.MODEL .
Eigentlich ist das nicht 100% richtig. Das kann Ihnen Modell geben (manchmal Zahlen).
Erhalten Sie den Hersteller des Telefons (HTC-Teil Ihrer Anfrage):
Build.MANUFACTURER
Für einen Produktnamen:
Build.PRODUCT
String name = Build.MANUFACTURER + " - " + Build.MODEL
dies die nützlichste Kombination ist. Build.PRODUCT verwendet manchmal einen unerwarteten Namen. Auf dem Galaxy Nexus wird beispielsweise "takgu" zurückgegeben. Build.MODEL hingegen ist der benutzerbezogene Wert, der unter Einstellungen-> Über Telefon-> Modellnummer angezeigt wird.
Für wen, die nach einer vollständigen Liste der Eigenschaften von Build
hier suchen , ist 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 einfach auflisten, indem Sie den Dialog "Ausdruck auswerten" mit kotlin verwenden:
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 die folgende Methode, um Modell und Hersteller programmgesteuert abzurufen
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 Zeichenfolgen sind alle nützlich, wenn Sie den Hersteller, den Namen des Geräts und / oder das Modell abrufen möchten:
String manufacturer = Build.MANUFACTURER;
String brand = Build.BRAND;
String product = Build.PRODUCT;
String model = Build.MODEL;
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 was in den Einstellungen steht. Für mein Motorola X bekomme ich das
Build.MODEL = "XT1053"
Build.BRAND = "motorola"
Build.PRODUCT = "ghost"
Gehen Sie zu der oben genannten Seite "Ghost" -Karten zu Moto X. Scheint, als könnte dies ein bisschen einfacher sein ...
Mit dem folgenden Code können Sie den Markennamen und das Markenmodell des Geräts abrufen.
String brand = Build.BRAND; // for getting BrandName
String model = Build.MODEL; // for getting Model of the device
Hier ist mein Code, um Hersteller, Markenname, Os-Version und Support-API-Level zu erhalten
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)
}
}
capitalize
Kotlins stackoverflow.com/a/59158474/1446466
Der Idolons-Code wurde ein wenig geändert. Dadurch werden Wörter beim Abrufen des Gerätemodells großgeschrieben.
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 Gibt den für einige Geräte lesbaren Namen für einige Geräte anBuild.MODEL
Build.DEVICE = OnePlus6
Build.MANUFACTURER = OnePlus
Build.MODEL = ONEPLUS A6003
Sie können den Namen des Telefongeräts von abrufen
BluetoothAdapter
Wenn das Telefon Bluetooth nicht unterstützt, müssen Sie den Gerätenamen aus erstellen
android.os.Build Klasse
Hier ist der Beispielcode, um den Namen des Telefongeräts 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;
}
Sie können die folgende Funktion ausprobieren und Ihren phoneModel-Namen im Zeichenfolgenformat zurückgeben.
public String phoneModel() {
return Build.MODEL;
}