获取Android设备名称

时间:2011-08-15 21:55:52

标签: java android device-name

如何获取Android设备名称?我正在使用HTC的愿望。当我通过HTC Sync连接时,软件显示名称'HTC Smith'。我想通过代码获取此名称。

这在Android中如何实现?

13 个答案:

答案 0 :(得分:262)

要获取Android设备名称,您只需添加一行代码:

android.os.Build.MODEL;

在此处找到:getting-android-device-name

答案 1 :(得分:41)

您可以在此处查看答案Get Android Phone Model Programmatically

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

答案 2 :(得分:23)

在许多流行的设备上,设备的市场名称不可用。例如,在三星Galaxy S6上,Build.MODEL的值可以是"SM-G920F""SM-G920I""SM-G920W8"

我创建了一个小型库,可以获得设备的市场(消费者友好型)名称。它为超过10,000个设备获取正确的名称,并不断更新。如果您想使用我的库,请单击以下链接:

AndroidDeviceNames Library on Github

如果您不想使用上面的库,那么这是获取消费者友好设备名称的最佳解决方案:

/** 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)

答案 3 :(得分:21)

我通过获取蓝牙名称来解决这个问题,但不是来自BluetoothAdapter(需要蓝牙许可)。

以下是代码:

Settings.Secure.getString(getContentResolver(), "bluetooth_name");

无需额外的权限。

答案 4 :(得分:20)

试试吧。您可以通过蓝牙获取设备名称。

希望它能帮到你

public String getPhoneName() {  
        BluetoothAdapter myDevice = BluetoothAdapter.getDefaultAdapter();
        String deviceName = myDevice.getName();     
        return deviceName;
    }

答案 5 :(得分:7)

您可以使用:

来自android doc:

  

MANUFACTURER:

String MANUFACTURER
     

产品/硬件的制造商。

     

MODEL:

String MODEL
     

最终产品的最终用户可见名称。

     

DEVICE:

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 class中的很多属性,例如:

  • 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类(通过蓝牙)。

答案 6 :(得分:1)

@ hbhakhra的答案会做。

如果您对详细说明感兴趣,请查看Android Compatibility Definition Document。 (3.2.2构建参数)

你会发现:

  

DEVICE - 设备实现者选择的值   标识配置的开发名称或代码名称   硬件特性和设备的工业设计。的价值   该字段必须可编码为7位ASCII并与常规字符匹配   表达“^ [a-zA-Z0-9 _-] + $”。

     

MODEL - 包含名称的设备实施者选择的值   最终用户已知的设备。这应该是同一个名字   该设备在市场上销售并出售给最终用户。没有   对该字段的具体格式的要求,除了它必须   不是null或空字符串("")。

     

MANUFACTURER - 原始设备制造商的商标名称   (OEM)的产品。对特定格式没有要求   该字段的除外,它必须不是null或空字符串   ("&#34)。

答案 7 :(得分:1)

UPDATE 您可以从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;
}

但请记住,这并不适用于某些设备。

答案 8 :(得分:1)

以下对我有用。

字符串deviceName = Settings.Global.getString(.getContentResolver(),Settings.Global.DEVICE_NAME);

我不认为它是重复的答案。上面的ppl在谈论设置安全性,对我来说,设置安全性为null,如果我使用全局设置则可以。还是谢谢你。

答案 9 :(得分:0)

只需使用

BluetoothAdapter.getDefaultAdapter().getName()

答案 10 :(得分:0)

尝试此代码。您将获得android设备名称。

public static String getDeviceName() {
    String manufacturer = Build.MANUFACTURER;
    String model = Build.MODEL;
    if (model.startsWith(manufacturer)) {
        return model;
    }
    return manufacturer + " " + model;
}

答案 11 :(得分:0)

 static String getDeviceName() {
        try {
            Class systemPropertiesClass = Class.forName("android.os.SystemProperties");
            Method getMethod = systemPropertiesClass.getMethod("get", String.class);
            Object object = new Object();
            Object obj = getMethod.invoke(object, "ro.product.device");
            return (obj == null ? "" : (String) obj);
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

enter image description here

您可以通过这种方式获取“ idol3”。

答案 12 :(得分:0)

用户定义的设备名称适用于几乎所有设备并且不需要任何权限的通用方法

String userDeviceName = Settings.Global.getString(getContentResolver(), Settings.Global.DEVICE_NAME);
if(userDeviceName == null)
    userDeviceName = Settings.Secure.getString(getContentResolver(), "bluetooth_name");