user14566279
user14566279

Reputation: 59

Unique ID for each android device

I am actually developing an android app looking to capture a unique Id for each android device but am not sure which Id is reliable

Telephony numbers Imei/imsi - Starting android 10, third-party apps will not be able to retrieve this id even though the permission is provided.

Secure ID - This id is sensitive to factory reset so it's not reliable.

Serial No: some phone has a serial number and some doesn't so not reliable

UUID- Generated by our app, which gets changed during the installation of every new release.

Is there any unique Id that doesn't have any dependency on the android version and doesn't change during factory reset as well?

Upvotes: 0

Views: 632

Answers (1)

Hatem Darwish
Hatem Darwish

Reputation: 33

You can use this method. I use it and take good result for many devices. You can added more than devices by calling adb shell getprop and read any unique value.

Reference : https://gist.github.com/flawyte/efd23dd520fc2320f94ba003b9aabfce

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 = (String) get.invoke(c, "ro.boot.serialno");

        if (serialNumber.equals(""))
            serialNumber = (String) get.invoke(c, "ro.ril.oem.sno");

        if(serialNumber.equals(""))
            serialNumber = (String) get.invoke(c, "ril.cdma.esn");

        if(serialNumber.equals(""))
            serialNumber = (String) get.invoke(c, "ro.boot.ap_serial");


        if(serialNumber.equals(""))
            serialNumber = (String) get.invoke(c, "ro.vendor.hon.imei.num");

        if(serialNumber.equals(""))
            serialNumber = (String) get.invoke(c,"ro.vendor.hon.extserial.num");

        if (serialNumber.equals("")){
            serialNumber= (String)get.invoke(c, "vendor.gsm.serial");
            serialNumber = serialNumber.substring(0,serialNumber.indexOf(' '));
        }
        if(serialNumber.equals(""))
            serialNumber = ((String)get.invoke(c,"ro.ril.oem.wifimac")).replace(":","");

        if (serialNumber.equals(""))
            serialNumber = ((String) get.invoke(c,"ro.ril.oem.btmac")).replace(":","");


        if (serialNumber.equals(""))
            serialNumber = Build.SERIAL;
        if (serialNumber.equals(Build.UNKNOWN))
            serialNumber = null;

    } catch (Exception e) {
        e.printStackTrace();
        serialNumber = null;
    }

    return serialNumber;
}

Upvotes: 0

Related Questions