簡體   English   中英

每個 android 器件的唯一 ID

[英]Unique ID for each android device

我實際上正在開發一個 android 應用程序,希望為每個 android 設備捕獲唯一的 Id,但不確定哪個 Id 是可靠的

電話號碼Imei/imsi - 從 android 10 開始,即使提供了權限,第三方應用程序也將無法檢索此 id。

安全 ID - 此 ID 對出廠重置敏感,因此不可靠。

序列號:有些手機有序列號,有些沒有,所以不可靠

UUID - 由我們的應用程序生成,在每個新版本的安裝過程中都會更改。

是否有任何唯一 ID 不依賴於 android 版本並且在出廠重置期間也不會更改?

您可以使用這些方法我使用它並為許多設備取得良好的效果,您可以添加比我調用 adb shell getprop 並讀取任何唯一值的設備更多的設備。

參考: 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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM