답변:
많은 인기있는 장치에서 장치의 시장 이름을 사용할 수 없습니다. 예를 들어, 삼성 갤럭시 S6에서의 값이 Build.MODEL
될 수있다 "SM-G920F"
, "SM-G920I"
또는 "SM-G920W8"
.
나는 장치의 시장 (소비자 친화적) 이름을 얻는 작은 라이브러리를 만들었습니다. 10,000 개가 넘는 장치 의 정확한 이름을 가져오고 지속적으로 업데이트됩니다. 내 라이브러리를 사용하려면 아래 링크를 클릭하십시오.
위의 라이브러리를 사용하지 않으려면 소비자 친화적 인 장치 이름을 얻는 가장 좋은 솔루션입니다.
/** 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의 예 :
// using method from above
System.out.println(getDeviceName());
// Using https://github.com/jaredrummler/AndroidDeviceNames
System.out.println(DeviceName.getDeviceName());
결과:
HTC6525LVW
HTC 하나 (M8)
getDeviceName()
? 그것이 당신에게 당신이 찾고있는 결과를 제공하지 않으면 내가 아는 더 좋은 해결책이 없습니다.
다음 코드를 사용하여 전체 장치 이름을 가져옵니다. 모델 문자열에 제조업체 이름이 이미 포함되어 있지 않은 경우 모델 및 제조업체 문자열을 가져와 연결합니다 (일부 전화의 경우).
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);
}
}
사용자로부터 얻은 장치 이름의 예는 다음과 같습니다.
Samsung GT-S5830L
Motorola MB860
Sony Ericsson LT18i
LGE LG-P500
HTC 욕망 V
HTC 산불 S A510e
…
예 : Build.MODEL .
실제로 그것은 100 % 정확하지 않습니다. 모델 (때로는 숫자)을 줄 수 있습니다.
전화기 제조업체 (요청의 HTC 부분) :
Build.MANUFACTURER
제품 이름의 경우 :
Build.PRODUCT
String name = Build.MANUFACTURER + " - " + Build.MODEL
가장 유용한 조합 임을 알았습니다 . Build.PRODUCT가 때때로 예기치 않은 이름을 사용합니다. 예를 들어 Galaxy Nexus에서는 "takgu"를 반환합니다. 반면 Build.MODEL은 설정-> 전화 정보-> 모델 번호 아래에 표시되는 사용자 대면 값입니다.
Build
여기에 대한 전체 속성 목록을 찾는 사람 은 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
kotlin을 사용하여 "표현식 평가"대화 상자를 사용하여 디버그 모드에서 장치의 속성을 쉽게 나열 할 수 있습니다.
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
프로그래밍 방식으로 모델 및 제조업체를 얻으려면 다음 방법을 사용하십시오.
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);
}
분명히 당신은 구글에서 목록을 사용해야합니다 https://support.google.com/googleplay/answer/1727131의
API는 내가 기대하는 것 또는 설정에서 아무것도 반환하지 않습니다. Motorola X의 경우 이것이 내가 얻는 것입니다
Build.MODEL = "XT1053"
Build.BRAND = "motorola"
Build.PRODUCT = "ghost"
받는가는 페이지 모토 X.에 "유령"지도 위에서 언급 한 것은이 조금 더 간단 할 수있는 것 같다 ...
여기 내 코드, 제조업체, 브랜드 이름, OS 버전 및 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;
}
산출:
System.out: button press on device name = Lava Alfa L iris(5.0) API-21
코 틀린 버전
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
변경된 아이돌 론 코드. 장치 모델을 가져올 때 단어를 대문자로 표시합니다.
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 일부 디바이스에 대해 사람이 읽을 수있는 이름을 제공합니다.Build.MODEL
Build.DEVICE = OnePlus6
Build.MANUFACTURER = OnePlus
Build.MODEL = ONEPLUS A6003
전화 장치 이름은
블루투스 어댑터
전화가 블루투스를 지원하지 않는 경우, 기기 이름을 구성해야합니다.
android.os.Build 클래스
다음은 전화 장치 이름을 가져 오는 샘플 코드입니다.
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;
}
다음 함수를 시도하고 phoneModel 이름을 문자열 형식으로 반환 할 수 있습니다.
public String phoneModel() {
return Build.MODEL;
}