Android'de telefon modelini programlı olarak okumanın bir yolu olup olmadığını bilmek istiyorum.
HTC Dream, Milestone, Sapphire ya da her neyse ...
Android'de telefon modelini programlı olarak okumanın bir yolu olup olmadığını bilmek istiyorum.
HTC Dream, Milestone, Sapphire ya da her neyse ...
Yanıtlar:
Birçok popüler cihazda, cihazın pazar adı mevcut değildir. Örneğin, Samsung Galaxy S6 değeri Build.MODEL
olabilir "SM-G920F"
, "SM-G920I"
ya da "SM-G920W8"
.
Bir cihazın pazar (tüketici dostu) adını alan küçük bir kütüphane oluşturdum. 10.000'den fazla cihaz için doğru adı alır ve sürekli güncellenir. Kütüphanemi kullanmak istiyorsanız aşağıdaki bağlantıyı tıklayın:
Yukarıdaki kütüphaneyi kullanmak istemiyorsanız, bu, tüketici dostu bir cihaz adı almak için en iyi çözümdür:
/** 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();
}
Verizon HTC One M8 cihazımdan bir örnek:
// using method from above
System.out.println(getDeviceName());
// Using https://github.com/jaredrummler/AndroidDeviceNames
System.out.println(DeviceName.getDeviceName());
Sonuç:
HTC6525LVW
HTC One (M8)
getDeviceName()
mi? Bu size aradığınız sonuçları vermezse, bildiğim daha iyi bir çözüm yoktur.
Tam aygıt adını almak için aşağıdaki kodu kullanın. Model ve üretici dizelerini alır ve model dizesi zaten üretici adını içermediği sürece bunları birleştirir (bazı telefonlarda):
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);
}
}
İşte kullanıcılardan aldığım cihaz adlarına birkaç örnek:
Samsung GT-S5830L
Motorola MB860
Sony Ericsson LT18i
LGE LG-P500
HTC Desire V
HTC Wildfire S A510e
…
Evet: Yapı.MODEL .
Aslında bu% 100 doğru değil. Bu size Model verebilir (bazen sayılar).
Telefon üreticisini (isteğinizin HTC kısmı) alacak:
Build.MANUFACTURER
Ürün adı için:
Build.PRODUCT
String name = Build.MANUFACTURER + " - " + Build.MODEL
en kullanışlı kombinasyon olarak buldum . Build.PRODUCT bazen beklenmedik bir ad kullanır. Örneğin, Galaxy Nexus'ta "takgu" döndürür. Build.MODEL ise Ayarlar-> Telefon Hakkında-> Model numarası altında görüntülenen kullanıcıya dönük değerdir.
Build
Burada özelliklerin tam listesini arayanlar için Sony Z1 Compact için bir örnek:
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
Kotlin kullanarak "ifadeyi değerlendir" iletişim kutusunu kullanarak bu özellikleri hata ayıklama modunda kolayca listeleyebilirsiniz:
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
Model ve üreticiyi programlı olarak almak için aşağıdaki yöntemi kullanın
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);
}
Görünüşe göre Google'dan https://support.google.com/googleplay/answer/1727131 adresindeki listeyi kullanmanız gerekiyor
API'lar beklediğim veya Ayarlar'daki hiçbir şeyi döndürmez. Motorola X için aldığım şey bu
Build.MODEL = "XT1053"
Build.BRAND = "motorola"
Build.PRODUCT = "ghost"
Yukarıda belirtilen sayfaya gitmek "X" Moto X için haritalar. Bu biraz daha basit olabilir gibi görünüyor ...
cihazın marka adını ve marka modelini almak için aşağıdaki kodu kullanabilirsiniz.
String brand = Build.BRAND; // for getting BrandName
String model = Build.MODEL; // for getting Model of the device
İşte kodum, Üretici, Marka adı, İşletim Sistemi sürümü ve destek API Seviyesi almak için
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;
}
Çıktı:
System.out: button press on device name = Lava Alfa L iris(5.0) API-21
Kotlin versiyonu
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
stackoverflow.com/a/59158474/1446466
Idolons kodu biraz değiştirildi. Bu, cihaz modelini alırken kelimeleri büyük harfe çevirir.
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 , bazı cihazlar için okunabilir ad verir.Build.MODEL
Build.DEVICE = OnePlus6
Build.MANUFACTURER = OnePlus
Build.MODEL = ONEPLUS A6003
Telefon cihazının adını
Bluetooth bağdaştırıcı
Telefonun Bluetooth'u desteklememesi durumunda, cihaz adını
android.os.Build sınıfı
İşte telefon cihaz adını almak için örnek kod.
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;
}