Android获取设备的唯一ID

时间:2019-05-19 12:22:01

标签: android telephonymanager

我需要将应用程序订阅限制为每个用户一定数量的设备。为此,我试图获取Android手机的唯一ID(硬件)。我发现以下选项,但所有选项都有某些问题。有没有解决这些问题的解决方案?

  • 使用TelephonyManager API(getDeviceId)的Imei / Mei号码-如果双卡同时存在有效和无效的SIM卡插槽,这将是一个问题。
  • AndroidId-恢复出厂设置后将重置
  • Wifi mac号码-需要连接wifi才能获得此号码,非wifi设备将无法使用此号码。
  • Advertaising id-可以由用户重置
  • Instance id-可以在恢复出厂设置时重置
  • Sim serial number-未绑定到设备,而是用于sim卡

1 个答案:

答案 0 :(得分:0)

经过仔细考虑,我提出了以下解决方案。

MacID可以用作唯一ID。即使Wifi处于关闭状态,也可以使用权限android.permission.READ_PHONE_STATE获得MacID。我已经在少数设备中成功测试了这些设备,并且工作正常。我的测试正在进行中,很快会在这里更新。

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