首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >每个android设备的唯一ID

每个android设备的唯一ID
EN

Stack Overflow用户
提问于 2021-04-26 16:12:06
回答 1查看 233关注 0票数 0

实际上,我正在开发一个android应用程序,希望为每个android设备捕获一个唯一的Id,但不确定哪个Id是可靠的。

电话号码Imei/imsi -启动android 10,第三方应用程序将无法检索此id,即使提供了许可。

安全ID -这个id是敏感的工厂重置,所以它是不可靠的。

序列号:有些手机有序列号,有些不可靠

UUID-由我们的应用程序生成,在每个新版本的安装过程中都会进行更改。

是否有任何唯一的Id不依赖于android版本,并且在工厂重置期间也不会更改?

EN

回答 1

Stack Overflow用户

发布于 2021-12-23 08:07:08

你可以用这个方法。我使用它,并在许多设备上取得了良好的效果。您可以通过调用亚行外壳getprop和读取任何唯一值来添加设备以外的其他内容。

参考资料:https://gist.github.com/flawyte/efd23dd520fc2320f94ba003b9aabfce

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67270143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档