Nhận mô hình điện thoại Android theo chương trình


355

Tôi muốn biết liệu có cách nào để đọc Mô hình điện thoại theo chương trình trong Android không.

Tôi muốn có được một chuỗi như HTC Dream, Milestone, Sapphire hoặc bất cứ điều gì ...

Câu trả lời:


328

Trên nhiều thiết bị phổ biến, tên thị trường của thiết bị không có sẵn. Ví dụ, trên Samsung Galaxy S6 giá trị Build.MODELcó thể "SM-G920F", "SM-G920I"hoặc "SM-G920W8".

Tôi đã tạo một thư viện nhỏ lấy tên thị trường (thân thiện với người tiêu dùng) của một thiết bị. Nó có được tên chính xác cho hơn 10.000 thiết bị và được cập nhật liên tục. Nếu bạn muốn sử dụng thư viện của tôi, nhấp vào liên kết dưới đây:

Thư viện AndroidDeviceNames trên Github


Nếu bạn không muốn sử dụng thư viện ở trên, thì đây là giải pháp tốt nhất để có được tên thiết bị thân thiện với người tiêu dùng:

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

Ví dụ từ Verizon HTC One M8 của tôi:

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

Kết quả:

HTC6525LVW

HTC One (M8)


19
Cảm ơn Jared. Tôi cần điều này ngày hôm nay nhưng đối với Xamarin.Android vì vậy đã dịch tệp của bạn sang C #. Nếu ai đó cần nó, bạn có thể tìm thấy nó ở đây. gist.github.com/mohibsheth/5e1b361ae49c257b8caf
Mohib Sheth

1
Có cách nào để có được tên sai "con người có thể đọc được" như "Xperia Z3" hoặc "Galaxy S3" mà không có lớp Thiết bị này không? Tôi không muốn sử dụng danh sách tĩnh của tất cả các thiết bị để đảm bảo thậm chí tất cả các thiết bị trong tương lai sẽ được hỗ trợ.
Radon8472

1
@ Radon8472 Bạn đã thử phương pháp tĩnh nhà máy ở trên có tên getDeviceName()chưa? Nếu điều đó không mang lại cho bạn kết quả mà bạn đang tìm kiếm thì đó không phải là giải pháp tốt hơn mà tôi biết.
Jared Rummler

@Jared: Tôi đã có một tên sai như kết quả của 'getDeviceName ()' nhưng tôi thích hiển thị tên mà những người cuối cùng biết từ các cửa hàng tiện dụng của họ :(
Radon8472

1
Xin chào tất cả tôi đã viết một mô-đun góc cho cái này được gọi là ng-fone bằng cách sử dụng danh sách từ Jared. Liên kết dưới đây cung cấp hướng dẫn về cách sử dụng nó. tphangout.com/?p=83
Raja Yogan

427

Tôi sử dụng mã sau đây để có được tên thiết bị đầy đủ. Nó lấy chuỗi mô hình và nhà sản xuất và nối chúng trừ khi chuỗi mô hình đã chứa tên nhà sản xuất (trên một số điện thoại có):

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

 

Dưới đây là một vài ví dụ về tên thiết bị tôi nhận được từ người dùng:

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


Nó có một danh sách ở đâu đó chứa tất cả các câu trả lời có thể bạn có thể ra khỏi điện thoại. Nói nếu bạn cần chuyển hướng người dùng về cách cài đặt một cái gì đó trên một loại điện thoại cụ thể hoặc bán một cái gì đó cho một kiểu máy cụ thể.
cá ác

7
@evilfish Hãy thử danh sách này từ Google: support.google.com/googleplay(/2727131
Idolon

Hoạt động hoàn hảo trên đồng hồ vì tôi cần nó cho Android Wear.
Wahib Ul Haq

116

Có: Build.MODEL .


Nó luôn mang lại cho tôi "SDK Android được xây dựng cho x86" khi tôi thử nó với trình giả lập. Không thể có được tên mô hình cụ thể trong trình giả lập chạy với tên mô hình khác nhau.
Swathi

Vâng, đó là mô hình của trình giả lập. Lưu ý rằng nó thậm chí sử dụng một tên tương tự cho bộ nhớ trong.
Cool Guy CG

34

Thật ra điều đó không đúng 100%. Điều đó có thể cung cấp cho bạn Mô hình (đôi khi số).
Sẽ giúp bạn trở thành Nhà sản xuất điện thoại (phần HTC trong yêu cầu của bạn):

 Build.MANUFACTURER

Đối với một tên sản phẩm:

 Build.PRODUCT

8
Tôi đã thấy rằng đó String name = Build.MANUFACTURER + " - " + Build.MODELlà sự kết hợp hữu ích nhất. Build.PRODVEL đôi khi sử dụng một tên bất ngờ. Ví dụ: trên Galaxy Nexus, nó trả về "takgu". Build.MODEL, mặt khác, là giá trị hướng tới người dùng được hiển thị trong Cài đặt-> Giới thiệu về điện thoại-> Số kiểu máy.
Mike Ortiz

1
Rất nhiều phụ thuộc vào nhà sản xuất; Các thiết bị HTC (Evo 4G, 4G LTE, 3D và Slide) sử dụng những gì tôi đã nêu ở trên.
Falcon165o

AXON 7 mini nằm trong danh sách. Tuy nhiên, AXON thường có kích thước ở đâu?
Serge

30

Đối với những người tìm kiếm danh sách đầy đủ các tài sản của Build ở đây là một ví dụ cho 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

Bạn có thể dễ dàng liệt kê các thuộc tính đó cho thiết bị của mình ở chế độ gỡ lỗi bằng hộp thoại "đánh giá biểu thức" bằng kotlin:

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

Sử dụng phương pháp sau để lấy mô hình & nhà sản xuất theo chương trình

  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

Các chuỗi sau đây đều được sử dụng khi bạn muốn truy xuất nhà sản xuất, tên của thiết bị và / hoặc kiểu máy:

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

8

Rõ ràng bạn cần sử dụng danh sách từ Google tại https://support.google.com/googleplay(/2727131

Các API không trả lại bất cứ điều gì tôi mong đợi hoặc bất cứ điều gì trong Cài đặt. Đối với Motorola X của tôi, đây là những gì tôi nhận được

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

Chuyển đến trang được đề cập ở trên bản đồ "ma" trên Moto X. Có vẻ như điều này có thể đơn giản hơn một chút ...


AXON 7 mini nằm trong danh sách. Tuy nhiên, AXON thường có kích thước ở đâu?
Serge

7

bạn có thể sử dụng mã sau đây để lấy tên thương hiệu và kiểu máy của thiết bị.

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

3

Đây là mã của tôi, Để có được Nhà sản xuất, Tên thương hiệu, Phiên bản Os và Cấp API hỗ trợ

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

Đầu ra:

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

3

Phiên bản 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)
    }
}

Tôi đã đăng một phiên bản ngắn hơn với capitalize stackoverflow.com
Sean

1

Thay đổi mã thần tượng một chút. Điều này sẽ viết hoa từ khi lấy mô hình thiết bị.

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

Phiên bản ngắn của 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()

1
Build.DEVICE // The name of the industrial design.

Build.DEVICE Cung cấp tên người dễ đọc cho một số thiết bị hơnBuild.MODEL

Build.DEVICE = OnePlus6
Build.MANUFACTURER = OnePlus
Build.MODEL = ONEPLUS A6003

0

Bạn có thể lấy tên thiết bị điện thoại từ

BluetoothAd CHƯƠNG

Trong trường hợp điện thoại không hỗ trợ Bluetooth, thì bạn phải tạo tên thiết bị từ

lớp android.os.Build

Dưới đây là mã mẫu để lấy tên thiết bị điện thoại.

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
CẢM ƠN BẠN!! Lưu ý rằng BLUETOOTH cho phép là cần thiết để làm việc này.
dùng2923322

-4

Bạn có thể thử chức năng sau và nó trả về tên phoneModel của bạn ở định dạng chuỗi.

public String phoneModel() {

    return Build.MODEL;
}

Câu trả lời này không cải thiện bất kỳ câu trả lời nào khác nói điều tương tự, và đã bị bỏ lại ở đây một năm trước.
Lynn sụp đổ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.