获取Android设备名称

Zac*_*ach 167 java android device-name

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

这在Android中怎么可能?

hbh*_*hra 265

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

android.os.Build.MODEL;
Run Code Online (Sandbox Code Playgroud)

在这里找到:getting-android-device-name

  • 只是为了澄清 - "BUILD.MODEL"只给出设备的型号而不是设备的名称.例如,GT-I9100而不是三星Galaxy S2.如果你想要模型的名字,你必须提供自己的列表,并将它与`android.os.Build.MANUFACTURER` +`android.os.Build.PRODUCT`的组合相匹配. (86认同)
  • @Chuong - 我在哪里可以获得这样的清单? (7认同)
  • 实际上,我发现 Build.MODEL 是型号名称,例如我的设备上显示“Nexus 7”和“Motorola Electrify”。 (2认同)

Ben*_*ima 43

你可以在这里看到答案以编程方式获取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);
    }
}
Run Code Online (Sandbox Code Playgroud)


Mic*_*cer 28

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

这是代码:

Settings.Secure.getString(getContentResolver(), "bluetooth_name");
Run Code Online (Sandbox Code Playgroud)

无需额外的权限.

  • 来自Settings.Secure的"bluetooth_name"将仅在设备重启后显示用户定义的名称,而来自Settings.Global(API 17+)的"device_name"将立即在Samsung S6活动中显示用户定义的名称.可以找到名称的位置可能因制造商或型号而异. (6认同)
  • 作为奖励(或惩罚,取决于您的需要),如果用户输入了自定义名称,则会报告用户输入的设备名称。 (2认同)
  • 只是补充一下,它可能有点旧。但您可以使用Settings.Global。您需要定义 android 提供程序:例如: android.provider.Settings.Global.getString(getContentResolver(), "device_name"); (2认同)

小智 23

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

希望它会对你有所帮助

public String getPhoneName() {  
        BluetoothAdapter myDevice = BluetoothAdapter.getDefaultAdapter();
        String deviceName = myDevice.getName();     
        return deviceName;
    }
Run Code Online (Sandbox Code Playgroud)

  • 我可以在Samsung S3和Nexus 5上使用(在已经具有BT权限的应用中)。您还应该检查myDevice == null,这样您就不会在没有蓝牙的设备上遇到问题。在这种情况下,我改用:deviceName = Build.MANUFACTURER +“” + Build.MODEL; (2认同)

Jar*_*ler 23

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

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

Github上的AndroidDeviceNames库


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

/** 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;
}
Run Code Online (Sandbox Code Playgroud)

我的Verizon HTC One M8示例:

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

结果:

HTC6525LVW

HTC One(M8)


Nee*_*rma 13

以下对我有用。

String deviceName = Settings.Global.getString(.getContentResolver(), Settings.Global.DEVICE_NAME);
Run Code Online (Sandbox Code Playgroud)

我不认为这是重复的答案。上面的人正在谈论设置安全,对我来说设置安全是给 null,如果我使用设置全局它可以工作。不管怎么说,多谢拉。


Bla*_*nka 8

您可以使用:

来自android doc:

MANUFACTURER:

String MANUFACTURER
Run Code Online (Sandbox Code Playgroud)

产品/硬件的制造商.

MODEL:

String MODEL
Run Code Online (Sandbox Code Playgroud)

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

DEVICE:

String DEVICE
Run Code Online (Sandbox Code Playgroud)

工业设计的名称.

举个例子:

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);
Run Code Online (Sandbox Code Playgroud)

此外,他们可以使用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类(通过蓝牙)的情况下获取设备名称.


Shp*_*and 7

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

String userDeviceName = Settings.Global.getString(getContentResolver(), Settings.Global.DEVICE_NAME);
if(userDeviceName == null)
    userDeviceName = Settings.Secure.getString(getContentResolver(), "bluetooth_name");
Run Code Online (Sandbox Code Playgroud)

  • 请注意,API 31(S)之后,使用“Settings.Secure.getString”获取“bluetooth_name”将导致异常。我自己尝试过,它可以在公开的[可用代码](https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/provider/Settings.java)中使用 (4认同)

小智 5

试试这个代码。您将获得 Android 设备名称。

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