如何获取Android设备名称?我正在使用HTC Desire。当我通过HTC Sync连接时,该软件显示名称为'HTC Smith'。我想通过代码获取这个名称。
在Android中如何实现呢?
如何获取Android设备名称?我正在使用HTC Desire。当我通过HTC Sync连接时,该软件显示名称为'HTC Smith'。我想通过代码获取这个名称。
在Android中如何实现呢?
BUILD.MODEL
只提供设备的型号而不是设备的名称。例如,它会返回GT-I9100而不是三星Galaxy S2。如果您想要设备的名称,您需要自己提供一个列表并将其与android.os.Build.MANUFACTURER
和android.os.Build.PRODUCT
的组合进行匹配。 - ChuongPhamandroid.os.Build.MODEL
并假设所有制造商的移动设备/平板电脑将显示相同的信息是不可靠的。如果您想匹配设备型号和设备名称,则需要创建自己的列表。 - ChuongPham您可以在这里查看答案 以编程方式获取Android手机型号
public String getDeviceName() {
String manufacturer = Build.MANUFACTURER;
String model = Build.MODEL;
if (model.startsWith(manufacturer)) {
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);
}
}
我通过获取蓝牙名称来解决了这个问题,但不是通过BluetoothAdapter
(需要蓝牙权限)。
以下是代码:
Settings.Secure.getString(getContentResolver(), "bluetooth_name");
无需额外权限。
更新:在targetSdk 32或更高版本上不起作用。
在许多热门设备上,设备的市场名称不可用。例如,在三星Galaxy 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;
String phrase = "";
for (char c : arr) {
if (capitalizeNext && Character.isLetter(c)) {
phrase += Character.toUpperCase(c);
capitalizeNext = false;
continue;
} else if (Character.isWhitespace(c)) {
capitalizeNext = true;
}
phrase += c;
}
return phrase;
}
来自我使用的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 One (M8)
试一下吧。你可以通过蓝牙获取设备名称。
希望这能帮到你。
public String getPhoneName() {
BluetoothAdapter myDevice = BluetoothAdapter.getDefaultAdapter();
String deviceName = myDevice.getName();
return deviceName;
}
BLUETOOTH_CONNECT
。 - iBobb您可以使用:
来自 Android 文档:
String MANUFACTURER
该产品/硬件的制造商。
MODEL
: 型号。String MODEL
最终产品的用户可见名称。
String DEVICE
工业设计的名称。
例如:
String deviceName = android.os.Build.MANUFACTURER + " " + android.os.Build.MODEL;
//to add to textview
TextView textView = (TextView) findViewById(R.id.text_view);
textView.setText(deviceName);
此外,Build类中有许多可用的属性,例如:
os.android.Build.BOARD
os.android.Build.BRAND
os.android.Build.BOOTLOADER
os.android.Build.DISPLAY
os.android.Build.CPU_ABI
os.android.Build.PRODUCT
os.android.Build.HARDWARE
os.android.Build.ID
此外,还有其他方法可以获得设备名称,而无需使用 Build
类(通过蓝牙)。
以下方法适用于我。
String deviceName = Settings.Global.getString(.getContentResolver(), Settings.Global.DEVICE_NAME);
我不认为这是重复的答案。上面的人们在谈论设置安全性,对我来说,设置安全性就是给予空值,如果我使用设置全局,则可以工作。无论如何,谢谢。
一种通用的方法,可使用户定义的设备名称适用于几乎所有设备,且无需任何权限。
String userDeviceName = Settings.Global.getString(getContentResolver(), Settings.Global.DEVICE_NAME);
if(userDeviceName == null)
userDeviceName = Settings.Secure.getString(getContentResolver(), "bluetooth_name");
DeviceInfo.Name
(来自Xamarin.Essentials)。由于Google尚未强制我们这样做,因此还没有重构以支持API 32。根据您的重要性,您可以只使用DeviceInfo.Name
或让用户知道为了正确显示此信息,您需要从他们那里请求蓝牙权限并从Xamarin公开的某些蓝牙API中获取信息。 - iBobb试试这段代码,你可以获取到安卓设备的名称。
public static String getDeviceName() {
String manufacturer = Build.MANUFACTURER;
String model = Build.MODEL;
if (model.startsWith(manufacturer)) {
return model;
}
return manufacturer + " " + model;
}
更新 您可以轻松地从buildprop中检索设备。
static String GetDeviceName() {
Process p;
String propvalue = "";
try {
p = new ProcessBuilder("/system/bin/getprop", "ro.semc.product.name").redirectErrorStream(true).start();
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
propvalue = line;
}
p.destroy();
} catch (IOException e) {
e.printStackTrace();
}
return propvalue;
}
Build.MODEL
则是由制造商硬编码的。 - Alex Cohn