首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android为设备获得唯一的id

问Android为设备获得唯一的id
EN

Stack Overflow用户
提问于 2019-05-19 12:22:01
回答 1查看 111关注 0票数 1

我需要限制应用订阅到一定数量的设备每个用户。为此,我试图为android手机(硬件)获得唯一的标识。我发现下面的选项,但它们都有一定的问题。有没有没有这些问题的解决办法?

  • 使用TelephonyManager API的Imei / Mei数字( getDeviceId --如果出现双sims,可能存在活动和非活动的sim插槽,这将是个问题。
  • AndroidId -将在工厂重置时重置
  • Wifi mac号码-需要连接wifi才能得到这个号码,而这将不会出现在非wifi设备上。
  • Advertaising id -用户可以重置
  • 实例id -可以在工厂重置时重置
  • Sim序列号 -不是绑定到设备上,而是为sim绑定的
EN

回答 1

Stack Overflow用户

发布于 2019-05-25 04:44:24

经过搜索和思考,我想出了下面的解决方案。

MacID可以用作唯一的id。即使在Wifi关闭状态下,MacID也可以使用android.permission.READ_PHONE_STATE获得权限。我已经在几个设备上成功地测试了这些,而且它工作得很好。我的测试正在进行中,不久将在这里更新。

代码语言:javascript
复制
public static String getDeviceMacId(){
        try {
            List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
            for (NetworkInterface nif : all) {
                if (!nif.getName().equalsIgnoreCase("wlan0")) continue;

                byte[] macBytes = nif.getHardwareAddress();
                if (macBytes == null) {
                    return "";
                }

                StringBuilder res1 = new StringBuilder();
                for (byte b : macBytes) {
                    res1.append(String.format("%02X:",b));
                }

                if (res1.length() > 0) {
                    res1.deleteCharAt(res1.length() - 1);
                }
                return res1.toString();
            }
        } catch (Exception ex) {
            //handle exception
        }
        return "";
    }

参考资料:https://stackoverflow.com/a/35830358/2788009

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56207764

复制
相关文章

相似问题

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