如何获取Android设备名称?我正在使用HTC欲望。当我通过HTC Sync连接它时,软件显示“HTC Smith”的名称。我想通过代码获取这个名称。

这在Android中是如何实现的呢?


当前回答

尝试了这些库,但没有按照我的期望工作,并给出了绝对错误的名称。

所以我自己用同样的数据创建了这个库。 这是链接

AndroidPhoneNamesFinder

要使用这个库,只需添加这个来实现

implementation 'com.github.aishik212:AndroidPhoneNamesFinder:v1.0.2'

然后使用下面的kotlin代码

DeviceNameFinder.getPhoneValues(this, object : DeviceDetailsListener
{  
    override fun details(doQuery: DeviceDetailsModel?) 
    {  
        super.details(doQuery)  
        Log.d(TAG, "details: "+doQuery?.calculatedName)  
    }  
})

这些是您将从DeviceDetailsModel中获得的值

val brand: String? #This is the brandName of the Device  
val commonName: String?, #This is the most common Name of the Device  
val codeName: String?,  #This is the codeName of the Device
val modelName: String?,  #This is the another uncommon Name of the Device
val calculatedName: String?, #This is the special name that this library tries to create from the above data.

Android模拟器示例-

brand=Google 
commonName=Google Android Emulator 
codeName=generic_x86_arm 
modelName=sdk_gphone_x86 
calculatedName=Google Android Emulator

其他回答

在许多流行的设备上,该设备的市场名称是不可用的。例如,在三星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;
}

以我的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)

尝试了这些库,但没有按照我的期望工作,并给出了绝对错误的名称。

所以我自己用同样的数据创建了这个库。 这是链接

AndroidPhoneNamesFinder

要使用这个库,只需添加这个来实现

implementation 'com.github.aishik212:AndroidPhoneNamesFinder:v1.0.2'

然后使用下面的kotlin代码

DeviceNameFinder.getPhoneValues(this, object : DeviceDetailsListener
{  
    override fun details(doQuery: DeviceDetailsModel?) 
    {  
        super.details(doQuery)  
        Log.d(TAG, "details: "+doQuery?.calculatedName)  
    }  
})

这些是您将从DeviceDetailsModel中获得的值

val brand: String? #This is the brandName of the Device  
val commonName: String?, #This is the most common Name of the Device  
val codeName: String?,  #This is the codeName of the Device
val modelName: String?,  #This is the another uncommon Name of the Device
val calculatedName: String?, #This is the special name that this library tries to create from the above data.

Android模拟器示例-

brand=Google 
commonName=Google Android Emulator 
codeName=generic_x86_arm 
modelName=sdk_gphone_x86 
calculatedName=Google Android Emulator

为了获得Android设备名称,你只需要添加一行代码:

android.os.Build.MODEL;

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

更新 你可以很容易地从建筑道具中取回设备。

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

但请记住,这在某些设备上不起作用。

在Android的GNU/Linux环境中,例如,通过非根设备上的Termux UNIX shell,它可以通过/system/bin/getprop命令获得,而每个值的含义都在Android中的Build.java中解释(也在googlesource中):

% /system/bin/getprop | fgrep ro.product | tail -3
[ro.product.manufacturer]: [Google]
[ro.product.model]: [Pixel 2 XL]
[ro.product.name]: [taimen]
% /system/bin/getprop ro.product.model
Pixel 2 XL
% /system/bin/getprop ro.product.model | tr ' ' _
Pixel_2_XL

例如,它可以被设置为tmux中status-right的pane_title,如下所示:

tmux select-pane "$(getprop ro.product.model)"