Android获取序列号

时间:2015-10-12 11:15:13

标签: java android

我正在尝试以编程方式获取设备序列号。我使用了以下行:

Build.SERIAL

返回类似的内容:

95b9efad04ad28

但是,我进入设备上的设置,我可以看到它显示不同的字符串:

enter image description here

有人能指出我正确的方向吗?

6 个答案:

答案 0 :(得分:4)

这对我有用:

String serialNumber;

try {
    Class<?> c = Class.forName("android.os.SystemProperties");
    Method get = c.getMethod("get", String.class, String.class);

    serialNumber = (String) get.invoke(c, "sys.serialnumber", "error");
    if (serialNumber.equals("error")) {
        serialNumber = (String) get.invoke(c, "ril.serialnumber", "error");
    }
} catch (Exception e) {
    e.printStackTrace();
}

答案 1 :(得分:2)

有几种方法可以获取该数字,具体取决于设备的制造商和Android版本:

public static String getSerialNumber() {
    String serialNumber;

    try {
        Class<?> c = Class.forName("android.os.SystemProperties");
        Method get = c.getMethod("get", String.class);

        serialNumber = (String) get.invoke(c, "gsm.sn1");
        if (serialNumber.equals(""))
            serialNumber = (String) get.invoke(c, "ril.serialnumber");
        if (serialNumber.equals(""))
            serialNumber = (String) get.invoke(c, "ro.serialno");
        if (serialNumber.equals(""))
            serialNumber = (String) get.invoke(c, "sys.serialnumber");
        if (serialNumber.equals(""))
            serialNumber = Build.SERIAL;

        // If none of the methods above worked
        if (serialNumber.equals(""))
            serialNumber = null;
    } catch (Exception e) {
        e.printStackTrace();
        serialNumber = null;
    }

    return serialNumber;
}

来自this gist

答案 2 :(得分:0)

这不是你的答案?:

TelephonyManager tManager = (TelephonyManager)myActivity.getSystemService(Context.TELEPHONY_SERVICE);
String uid = tManager.getDeviceId();

我在here

中找到了它

答案 3 :(得分:0)

  

我正在尝试以编程方式获取设备序列号

此功能在Android上已经过了很长时间。有些设备返回null,有些会为所有设备返回相同的ID等。如果您的应用使用的是Google Play服务,请改用InstanceId,或者看一下,但现在很古老,但仍然有效,{ {3}}

答案 4 :(得分:0)

由于Android ID在许多设备和Android构建中都被破坏,我使用的是Android ID和设备WIFI-MAC地址的混合,这是每台设备唯一的。 两者都用于创建UUID,无论Android ID是否为null,UUID始终是唯一的。

尝试以下内容:

final WifiManager wm = (WifiManager) myAct.getSystemService(Context.WIFI_SERVICE);
String macAddr = null;
if (wm != null)
    macAddr = wm.getConnectionInfo().getMacAddress();
String androidId = Secure.getString(myAct.getContentResolver(), Secure.ANDROID_ID);

if (androidId == null)
    androidId = "0000000000000000";

if (macAddr == null || macAddr.contains("\\s+") || !macAddr.contains(":"))
    macAddr = "00:00:00:00:00:00";

UUID deviceUuid = new UUID(macAddr.hashCode(), androidId.hashCode());
String deviceId = deviceUuid.toString();

答案 5 :(得分:0)

我知道这个问题已经有好几年了,但是我想发布一个更新的版本,尤其是对于那些可能使用Xamarin的用户。这是一个基于C#Xamarin Android的解决方案,基于上面的用户缺陷发布的解决方案。

代码如下:

public static string GetDeviceSerialCode ( )
{
    string serial_number = string.Empty;

    try
    {
        var c = Java.Lang.Class.ForName("android.os.SystemProperties");
        var get = c.GetMethod("get", Java.Lang.Class.FromType(typeof(Java.Lang.String)));

        serial_number = (string)get.Invoke(c, "gsm.sn1");
        if (string.IsNullOrEmpty(serial_number))
        {
            serial_number = (string)get.Invoke(c, "ril.serialnumber");
        }
        if (string.IsNullOrEmpty(serial_number))
        {
            serial_number = (string)get.Invoke(c, "ro.serialno");
        }
        if (string.IsNullOrEmpty(serial_number))
        {
            serial_number = (string)get.Invoke(c, "sys.serialnumber");
        }
        if (string.IsNullOrEmpty(serial_number))
        {
            serial_number = Build.GetSerial();
        }
    }
    catch (Exception e)
    {
        serial_number = string.Empty;
    }

    return serial_number;
}