android 获得设备唯一标识码(总有一款适合你)

在开发OA考勤项目中,需要实现一个账号只能绑定一台设备的功能,因此需要获取设备唯一标识码。但遇到Android系统不同版本、厂商限制等问题,导致无法直接使用deviceID。文中介绍了获取IMEI、Android 10后的限制、移动安全联盟的补充设备标识等,并分享了作者的解决方案——结合androidId、序列号和硬件信息,通过内部和外部存储管理生成的设备ID。
摘要由CSDN通过智能技术生成

白嫖党可直接下滑到最后 (手动滑稽) 绕开那些不太完美的办法

场景

最近在做一个OA考勤项目,里面有个需求是一个账号只允许绑定一台设备, 这就需要将设备唯一标识码与账号绑定在一起,咋一听 这还不So Easy啊,直接获取deviceID 不就好了。。。

问题

private String getSerial() {
   
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
   
        return Build.getSerial();
    } else {
   
        return Build.SERIAL;
    }
}

咋一操作也挺好。 可到了大面积的群体用户测试环节发现了几个问题。

  1. 需要获取手机READ_PHONE_STATE权限,这个权限涉及的信息还挺多。我们为了设备id有点大材小用
  2. 在努比亚和一加手机上有返回null 和 000000 ,应该是厂商在这方面做了特别的处理来保护用户隐私
  3. 在Android10 就已经完全获取不到,返回unknown
  4. 如果是双卡,其中一张卡是电信的,手机是小米的,那么你更换卡槽的位置,deviceId会从IMIE1 变为MEID。华为、荣耀等机型未发现。(当然也有解决办法获取 getDeviceId(0)的方式)

在Android 10以下版本虽然可以获取到IMEI码,但是需要在应用获取到了READ_PHONE_STATE权限,并且我们仍然没法保证所有的设备都能正常返回


简言之就是如果你的手机需要考虑Android9以上的设备,你就没办法通过获取系统提供的API完全的获取到设备唯一标识码,根据Android文档唯一标识符最佳做法你也许可以这样…


唯一标识符最佳做法

呃… 这个特殊运营商许可 和这个 READ_PRIVILEGED_PHONE_STATE

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值