Android Telefon Modelini programlı olarak alın


355

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:


328

Birçok popüler cihazda, cihazın pazar adı mevcut değildir. Örneğin, Samsung Galaxy S6 değeri Build.MODELolabilir "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:

Github'daki AndroidDeviceNames Kütüphanesi


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)


19
Teşekkürler Jared. Bugün buna ihtiyacım vardı ama Xamarin.Android için dosyanızı C # diline çevirdim. Başka birinin ihtiyacı varsa, burada bulabilirsiniz. gist.github.com/mohibsheth/5e1b361ae49c257b8caf
Mohib Sheth

1
Bu Devices sınıfı olmadan "Xperia Z3" veya "Galaxy S3" gibi "okunabilir" cihaz adını almanın bir yolu var mı? Gelecekteki tüm cihazların bile destekleneceğinden emin olmak için tüm cihazların statik bir listesini kullanmak istemiyorum.
Radon8472

1
@ Radon8472 Yukarıda belirtilen statik fabrika yöntemini denediniz getDeviceName()mi? Bu size aradığınız sonuçları vermezse, bildiğim daha iyi bir çözüm yoktur.
Jared Rummler

@Jared: Zaten 'getDeviceName ()' nin sonuçları gibi bir cihazım var ama
enduser'ın

1
Merhabalar ben Jared listesini kullanarak ng-fone adlı açısal bir modül yazdı. Aşağıdaki bağlantı, nasıl kullanılacağına ilişkin talimatlar verir. tphangout.com/?p=83
Raja Yogan

427

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


Orada bir yerde telefondan alabilirsiniz tüm olası cevap tutan bir liste. Bir kullanıcıyı belirli bir telefon türüne nasıl bir şey yükleyeceği konusunda yönlendirmeniz veya belirli bir modele bir şey satmanız gerekip gerekmediğini söyleyin.
evilfish

7
@evilfish Bu listeyi Google'dan deneyin: support.google.com/googleplay/answer/1727131
Idolon

Android Wear için ihtiyacım olduğu için saatte mükemmel çalışıyor.
Wahib Ul Haq

116

Evet: Yapı.MODEL .


Öykünücüyle denediğimde bana her zaman "x86 için tasarlanmış Android SDK" veriyor. Model adı, özellikle farklı model adıyla çalışan taklitçide alınamıyor.
Swathi

Evet, emülatörün modeli bu. Dahili depolama için benzer bir ad bile kullandığını unutmayın.
Cool Guy CG

34

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

8
Bunu String name = Build.MANUFACTURER + " - " + Build.MODELen 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.
Mike Ortiz

1
Birçoğu üreticiye bağlıdır; HTC cihazları (Evo 4G, 4G LTE, 3D ve Slayt) yukarıda belirttiğim şeyi kullanıyor.
Falcon165o

AXON 7 mini listede. Yine de düzenli olarak boyutlandırılmış AXON nerede?
Serge

30

BuildBurada ö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")

14
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);
    }

8

Üreticiyi, cihazın adını ve / veya modeli almak istediğinizde aşağıdaki dizelerin tümü kullanılır:

String manufacturer = Build.MANUFACTURER;
String brand        = Build.BRAND;
String product      = Build.PRODUCT;
String model        = Build.MODEL;

8

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 ...


AXON 7 mini listede. Yine de düzenli olarak boyutlandırılmış AXON nerede?
Serge

7

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

3

İş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

3

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)
    }
}


1

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();
    }
}

1

Kotlin kısa versiyonu:

import android.os.Build.MANUFACTURER
import android.os.Build.MODEL

fun getDeviceName(): String =
    (if (MODEL.startsWith(MANUFACTURER, ignoreCase = true)) {
        MODEL
    } else {
        "$MANUFACTURER $MODEL"
    }).capitalize()

1
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

0

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;
}

2
TEŞEKKÜR EDERİM!! Bunun çalışması için BLUETOOTH izninin gerekli olduğunu unutmayın.
user2923322

-4

Aşağıdaki fonksiyonu deneyebilir ve telefonun adını dize biçiminde döndürebilirsiniz.

public String phoneModel() {

    return Build.MODEL;
}

Bu cevap, aynı şeyi söyleyen ve bir yıl önce burada bırakılan diğer cevapların hiçbirinde iyileşmez.
Lynn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.