Android: How to programmatically access the device serial number shown in the AVD manager (API Version 8)

前端 未结 4 749
孤街浪徒
孤街浪徒 2020-11-28 07:54

How do I programmatically access the value shown in the image below ?

\"enter

4条回答
  •  甜味超标
    2020-11-28 08:38

    Build.SERIAL can be empty or sometimes return a different value (proof 1, proof 2) than what you can see in your device's settings.

    If you want a more complete and robust solution, I've compiled every possible solution I could found in a single gist. Here's a simplified version of it :

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

    I try to update the gist regularly whenever I can test on a new device or Android version. Contributions are welcome too.

提交回复
热议问题