一、获取各种单一的设备标识方式
1、DEVICE_ID
概念:是区别移动设备的标志,储存在移动设备中,可用于监控被窃或无效的移动设备。
优点:根据不同的手机设备返回IMEI,MEID或者ESN码,唯一性良好
缺点:由于获取该唯一值,需要android.peimision.READ_PHONE_STATE,如果设备没有通话功能就返回为null
关键代码:
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String imei = tm.getDeviceId();
测试结果:小米HM note Android4.4.4 能正常获取该ID
华为H60-L03 Android4.4.2 能正常获取该ID
三星Galaxy S5 Android5.0 能正常获取该ID

2、WIFI MAC
概念:获取手机wifi的Mac地址作为唯一标识
优点:
缺点:如果设备没有支持WIFI的硬件,就返回null
关键代码:WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);WifiInfo info = wifi.getConnectionInfo().getMacAddress();String wifiMac = info.getMacAddress();
测试结果:小米HM note Android4.4.4 能正常获取该ID华为H60-L03 Android4.4.2 能正常获取该ID三星Galaxy S5 Android5.0 能正常获取该ID3、BlueTooth MAC
概念:获取手机的蓝牙Mac地址作为唯一设备标识
优点:
缺点:如果设备没有支持蓝牙的硬件,就返回null
关键代码:BluetoothAdapter btAdapter = null; //本地蓝牙适配器btAdapter = BluetoothAdapter.getDefaultAdapter();String btMacAddress = btAdapter.getAddress();
测试结果:小米HM note Android4.4.4 能正常获取该ID华为H60-L03 Android4.4.2 能正常获取该ID三星Galaxy S5 Android5.0 能正常获取该ID4、SIM Serial Number
概念:SIM卡的序列号
优点:
缺点:没有SIM卡就返回null对于CDMA设备,返回null
关键代码:
TelephonyManager tm = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
String sn = tm.getSimSerialNumber();
测试结果:小米HM note Android4.4.4 有装SIM卡 能正常获取该ID华为H60-L03 Android4.4.2 没有SIM卡 返回ID为null三星Galaxy S5 Android5.0 没有SIM卡 返回ID为null5、利用设备各个硬件拼接出一个ID
概念:设备内的每个硬件都有一个名称,利用名称的长度的个位数组合成一个设备标识ID
优点:非手机设备也可以通过该接口获取ID
缺点:统一型号的设备出现相同ID的可能性比较大
关键代码:String DevIDShort = "35" + //头部加上"35",这样这个ID看起来就和15位IMEI一样了     Build.BOARD.length() % 10 +Build.BRAND.length() % 10 +Build.CPU_ABI.length() % 10 +Build.DEVICE.length() % 10 +Build.DISPLAY.length() % 10 +Build.HOST.length() % 10 +Build.ID.length() % 10 +Build.MANUFACTURER.length() % 10 +Build.MODEL.length() % 10 +Build.PRODUCT.length() % 10 +Build.TAGS.length() % 10 +Build.TYPE.length() % 10 +Build.USER.length() % 10;
测试结果:小米HM note Android4.4.4 能正常获取该ID华为H60-L03 Android4.4.2 能正常获取该ID三星Galaxy S5 Android5.0 能正常获取该ID6、Android_ID
概念:当设备首次启动时,系统会随机生成一个64位的数字,并把这个数字以16进制字符串的形式保存下来
优点:
缺点:由于厂商定制的Bug,不同的设备可能会产生相同的ANDROID_ID或返回值为nullAndorid手机被Root过的话,这个ID也可以被任意改变
关键代码:String androidID = Secure.getString(context.getContentResolver(), Secure.ANDROID_ID);
测试结果:小米HM note Android4.4.4 能正常获取该ID华为H60-L03 Android4.4.2 能正常获取该ID三星Galaxy S5 Android5.0 能正常获取该ID7、Serial Number
概念:Android系统2.3版本以上可以获取硬件Serial Number
优点:非手机设备也可以通过该接口获取ID
缺点:
关键代码:String sn = android.os.Build.SERIAL;
测试结果:小米HM note Android4.4.4 能正常获取该ID华为H60-L03 Android4.4.2 能正常获取该ID三星Galaxy S5 Android5.0 能正常获取该ID

二、自定义一个设备标识ID
问题分析:由于Android并没有一个统一靠谱的设备标识,所以我就参考腾讯的做法,自定义一个设备标识ID。
算法逻辑:利用上面获取的各个方式的标识ID,拼接成一个字符串,再利用消息摘要,生成MD5值作为设备标识ID
关键代码:
public static String encryptMD5(byte[] data) throws NoSuchAlgorithmException{
MessageDigest md5 = MessageDigest.getInstance(“MD5”);
md5.update(data);
byte[] resultBytes = md5.digest();
return resultBytes.toString();
}

更多技术干货,欢迎到我的个人博客http://littleRich.top/
获取开源项目GitHub:http://github.com/littleRich/

Android设备唯一标识符ID相关推荐

  1. android设备唯一标识符_安卓设备唯一标识,用什么来获取》?

    appcan.device.getInfo(infoId,callback) 获取设备对应id的信息 infoId:相关信息id 0: 描述CPU频率的字符串,eg:"1024MHZ&quo ...

  2. Android手机设备唯一标识符

    在Android App开发过程中有时需要确定手机设备的唯一性.但是Android 手机设备的唯一标识的获取并不能保持每次都能获取成功,因而无法保持手机的唯一性.Android手机获取唯一标识一直没有 ...

  3. 获取android设备唯一ID和用途

    获取android设备唯一ID和用途 编者:李国帅 qq:9611153 微信lgs9611153 时间:2021/5/16 获取android设备唯一ID: 在android9及之前,我们还是可以获 ...

  4. matlab主机ID与许可证不匹配,iDRAC7错误 - LIC008:许可证绑定ID与设备唯一标识符不匹配...

    本文讨论如何解决在第 12 代 PowerEdge 服务器上尝试导入 iDRAC7 永久许可证时出现的问题.其中包括 FM120x4.M420.M520.M520 (PE VRTX).M620.M62 ...

  5. Android有文件读写权限,无法读写文件 open failed: EACCES (Permission denied) 获取设备唯一不变id 所有文件读写权限按钮无法打开

    最近有个需求,要获取设备唯一id,Android一直没有什么完善的方案获取设备唯一不变的id,我就结合了几种方案组成了一下: 1. 首先获取IMEI; IMEI获取失败后 2. 获取SN序列号,序列号 ...

  6. 获取android设备唯一编号_android获取设备唯一标识完美解决方案的思考以及实现方式...

    关于Android设备唯一标识符号 前言 由于在开发中需要开发游客模式,在用户没有登录的情况下必须确保设备的唯一性,于是惯性思维想到的肯定是使用DevicesId 来作为设备的唯一标识,用以代替用户登 ...

  7. Android设备唯一标识(AndroidID,OAID等 )

    一.ID 体系:你只是一串代码 想要了解 OAID,我们首先需要明白 ID 体系:想要追踪一个用户就必须先找到用户,在这个过程中,标识符(ID)就像我们的另一张身份证,它们就代表了数字化之后的你和我. ...

  8. 通过Safari浏览器获取iOS设备UDID(设备唯一标识符)

    通过Safari与mobileconfig获取iOS设备UDID(设备唯一标识符) 科普:U D I D (Unique Device Identifier),唯一标示符,是iOS设备的一个唯一识别码 ...

  9. iOS设备唯一标识符探讨

    iOS设备唯一标识符探讨 一.现有方案 1.UDID(Unique Device Identifier) 获取方法:[[UIDevice currentDevice] uniqueIdentfier] ...

最新文章

  1. VS Code 调试 OneFlow
  2. CssGaga 快速上手指南
  3. 十张图说明机器学习在S/4中的应用
  4. 从人的角度分析进销存管理的需求
  5. ZigBee TI ZStack CC2530 3.18 串口01-发送
  6. formate JAVA_JAVA String.format 方法使用
  7. “http 500内部服务器错误”的解决方法
  8. c 读取mysql另一个窗体中显示出来_二级ACCESS数据库4窗体的笔试题考点分析
  9. Android系统进程间通信(IPC)机制Binder中的Server启动过程源代码分析(1)
  10. centos6.0的gnome桌面的一个大bug
  11. 力扣-451 根据字符出现频率排序
  12. mysql可视化界面创建表_使用可视化界面创建表
  13. 微信PC版通信协议研究
  14. phpstudy重置密码登录报错#1045
  15. 使用七牛云存储图片案例
  16. Nagios③:文件初探
  17. 51单片机——LED1357亮,2468闪
  18. abstract 抽象学习
  19. 验证银行卡号是否合法
  20. ubuntu18.0.4桌面死机问题

热门文章

  1. 解决“TypeError: Cannot read properties of undefined (reading ‘push‘)“
  2. CTF编码和加密总结
  3. Markdown语法-从基础到进阶
  4. 用MOBA游戏的方式来评估候选人实力
  5. 霹雳火s毕老师_$_Java笔记(一)
  6. 三、HTML5之文本元素
  7. 【5G核心网】5G概念以及名词缩写解释
  8. 智工运维定位器之ublox
  9. 剪枝优化RIPPER算法
  10. 《深入浅出DPDK》——DPDK网络功能虚拟化