Dapatkan Model Ponsel Android secara terprogram

355

Saya ingin tahu apakah ada cara untuk membaca Model Telepon secara terprogram di Android.

Saya ingin mendapatkan string seperti HTC Dream, Milestone, Sapphire atau apa pun ...

Andrea Baccega
sumber

Jawaban:

328

Pada banyak perangkat populer, nama pasar perangkat tidak tersedia. Sebagai contoh, pada Samsung Galaxy S6 nilai Build.MODELbisa "SM-G920F", "SM-G920I"atau "SM-G920W8".

Saya membuat perpustakaan kecil yang mendapat nama pasar (ramah konsumen) dari sebuah perangkat. Itu mendapatkan nama yang benar untuk lebih dari 10.000 perangkat dan terus diperbarui. Jika Anda ingin menggunakan perpustakaan saya klik tautan di bawah ini:

Perpustakaan AndroidDeviceNames di Github


Jika Anda tidak ingin menggunakan perpustakaan di atas, maka ini adalah solusi terbaik untuk mendapatkan nama perangkat yang ramah konsumen:

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

Contoh dari Verizon HTC One M8 saya:

// using method from above
System.out.println(getDeviceName());
// Using https://github.com/jaredrummler/AndroidDeviceNames
System.out.println(DeviceName.getDeviceName());

Hasil:

HTC6525LVW

HTC One (M8)

Jared Rummler
sumber
19
Terima kasih Jared. Saya membutuhkan ini hari ini tetapi untuk Xamarin.Android menerjemahkan file Anda ke C #. Jika orang lain membutuhkannya, Anda dapat menemukannya di sini. gist.github.com/mohibsheth/5e1b361ae49c257b8caf
Mohib Sheth
1
Apakah ada cara untuk mendapatkan devicename "dapat dibaca manusia" seperti "Xperia Z3" atau "Galaxy S3" tanpa kelas Perangkat ini? Saya tidak ingin menggunakan daftar statis semua perangkat untuk memastikan bahkan semua perangkat masa depan akan didukung.
Radon8472
1
@ Radon8472 Sudahkah Anda mencoba metode pabrik statis yang disebutkan di atas getDeviceName()? Jika itu tidak memberi Anda hasil yang Anda cari tidak ada solusi yang lebih baik yang saya tahu.
Jared Rummler
@Jared: Saya sudah memiliki devicename seperti hasil 'getDeviceName ()' tapi saya suka menampilkan nama yang diketahui pengguna akhir dari toko mereka :(
Radon8472
1
Hai semua saya menulis modul sudut untuk ini disebut ng-fone menggunakan daftar dari Jared. Tautan di bawah ini memberikan instruksi tentang cara menggunakannya. tphangout.com/?p=83
Raja Yogan
427

Saya menggunakan kode berikut untuk mendapatkan nama perangkat lengkap. Ia mendapatkan model dan string pabrikan dan menggabungkannya kecuali string model sudah berisi nama pabrikan (pada beberapa ponsel memang demikian):

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

 

Berikut adalah beberapa contoh nama perangkat yang saya dapatkan dari pengguna:

Samsung GT-S5830L
Motorola MB860
Sony Ericsson LT18i
LGE LG-P500
HTC Desire V
HTC Wildfire S A510e

Idola
sumber
Itu ada daftar di suatu tempat yang menyimpan semua jawaban yang mungkin Anda bisa keluar dari telepon. Katakan jika Anda perlu mengarahkan ulang pengguna tentang cara memasang sesuatu pada jenis telepon tertentu atau menjual sesuatu ke model tertentu.
evilfish
7
@evilfish Coba daftar ini dari Google: support.google.com/googleplay/answer/1727131
Idolon
Bekerja dengan sempurna pada jam tangan karena saya membutuhkannya untuk Android Wear.
Wahib Ul Haq
116

Ya: Bangun . MODEL .

Mirko N.
sumber
Itu selalu memberi saya "Android SDK dibangun untuk x86" ketika saya mencobanya dengan emulator. Tidak dapat memperoleh nama model secara khusus dalam menjalankan emulator dengan nama model yang berbeda.
Swathi
Ya, itulah model emulatornya. Perhatikan bahwa ia bahkan menggunakan nama yang mirip untuk penyimpanan internal.
Cool Guy CG
34

Sebenarnya itu tidak 100% benar. Itu bisa memberi Anda Model (kadang-kadang angka).
Akan memberi Anda Produsen telepon (bagian HTC dari permintaan Anda):

 Build.MANUFACTURER

Untuk nama produk:

 Build.PRODUCT
Falcon165o
sumber
8
Saya telah menemukan bahwa String name = Build.MANUFACTURER + " - " + Build.MODELmenjadi kombinasi yang paling berguna. Build.PRODUCT terkadang menggunakan nama yang tidak terduga. Misalnya, pada Galaxy Nexus, ia mengembalikan "takgu". Build.MODEL, di sisi lain, adalah nilai yang menghadap pengguna yang ditampilkan di bawah Pengaturan-> Tentang Telepon-> Nomor model.
Mike Ortiz
1
Banyak hal tergantung pada pabriknya; Perangkat HTC (Evo 4G, 4G LTE, 3D dan Slide) menggunakan apa yang saya sebutkan di atas.
Falcon165o
AXON 7 mini ada dalam daftar. Namun di mana AXON berukuran reguler?
Serge
30

Untuk siapa yang mencari daftar properti lengkap di Buildsini adalah contoh untuk 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

Anda dapat dengan mudah mendaftar properti-properti untuk perangkat Anda dalam mode debug menggunakan dialog "evaluasi ekspresi" menggunakan kotlin:

android.os.Build::class.java.fields.map { "Build.${it.name} = ${it.get(it.name)}"}.joinToString("\n")
ruX
sumber
14
String deviceName = android.os.Build.MODEL; // returns model name 

String deviceManufacturer = android.os.Build.MANUFACTURER; // returns manufacturer

Gunakan metode Mengikuti untuk mendapatkan model & pabrikan secara terprogram

  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);
    }
Ajay Pandya
sumber
8

Semua string berikut digunakan saat Anda ingin mengambil pabrikan, nama perangkat, dan / atau model:

String manufacturer = Build.MANUFACTURER;
String brand        = Build.BRAND;
String product      = Build.PRODUCT;
String model        = Build.MODEL;
ulat sutra
sumber
8

Tampaknya Anda perlu menggunakan daftar dari Google di https://support.google.com/googleplay/answer/1727131

API tidak mengembalikan apa pun yang saya harapkan atau apa pun di Pengaturan. Untuk Motorola X saya inilah yang saya dapatkan

   Build.MODEL = "XT1053"
   Build.BRAND = "motorola"
   Build.PRODUCT = "ghost"

Pergi ke halaman yang disebutkan di atas "hantu" peta ke Moto X. Sepertinya ini bisa menjadi sedikit lebih sederhana ...

Edwin Evans
sumber
AXON 7 mini ada dalam daftar. Namun di mana AXON berukuran reguler?
Serge
7

Anda dapat menggunakan kode berikut untuk mendapatkan nama merek dan model merek perangkat.

 String brand = Build.BRAND; // for getting BrandName
 String model = Build.MODEL; // for getting Model of the device
RamakanthReddy
sumber
3

Ini kode saya, Untuk mendapatkan Produsen, nama Merek, versi Os dan mendukung Level API

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

Keluaran:

System.out: button press on device name = Lava Alfa L iris(5.0) API-21
Saurabh Gaddelpalliwar
sumber
3

Versi Kotlin

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)
    }
}
Francisco Pereira
sumber
Saya telah memposting versi yang lebih pendek dengan capitalize stackoverflow.com/a/59158474/1446466
Sean
1

Berubah sedikit kode Idola. Ini akan menggunakan huruf besar kata-kata saat mendapatkan model perangkat.

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

Versi pendek Kotlin:

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

fun getDeviceName(): String =
    (if (MODEL.startsWith(MANUFACTURER, ignoreCase = true)) {
        MODEL
    } else {
        "$MANUFACTURER $MODEL"
    }).capitalize()
Sean
sumber
1
Build.DEVICE // The name of the industrial design.

Build.DEVICE Memberikan nama yang dapat dibaca manusia untuk beberapa perangkat selainBuild.MODEL

Build.DEVICE = OnePlus6
Build.MANUFACTURER = OnePlus
Build.MODEL = ONEPLUS A6003
majurageerthan
sumber
0

Anda bisa mendapatkan nama perangkat telepon dari

BluetoothAdapter

Jika ponsel tidak mendukung Bluetooth, maka Anda harus membuat nama perangkat dari

kelas android.os.Build

Berikut ini contoh kode untuk mendapatkan nama perangkat ponsel.

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;
}
Sridhar Nalam
sumber
2
TERIMA KASIH!! Perhatikan bahwa izin BLUETOOTH diperlukan agar ini berfungsi.
user2923322
-4

Anda dapat mencoba fungsi berikut dan mengembalikan nama phoneModel Anda dalam format string.

public String phoneModel() {

    return Build.MODEL;
}
Quantum4U
sumber
Jawaban ini tidak membaik pada jawaban lain yang mengatakan hal yang sama, dan ditinggalkan di sini setahun yang lalu.
Lynn Crumbling