Android设备唯一标识符

一、前言

在开发中,我们有时候会遇到获取Android设备的唯一标识,唯一标识必须满足两个特性才能完美解决定位唯一设备的问题:
(1)唯一性:标识必须在所有使用该应用的设备上保持唯一性
(2)不变性:标识必须在同一设备上保持不变

二、使用硬件标识

硬件标识实际上在硬件生产之时就被要求满足这两个特性(依然有人工生产的不确定性),所以,在过去,这是一种很常用的方案,但如今硬件标识的获取趋于困难性,使得使用硬件标识作为唯一识别码的方案所能使用的范围越来越狭窄,官方也不推荐使用这种方式。

2.1 IMEI

IMEI 国际移动设备身份码 目前GSM/WCDMA/LTE手机终端需要使用IMEI号码,在单卡工程中一个手机号对应一个IMEI号,双卡手机则会对应两个IMEI号,一张是手机卡对应一个。
需要权限

	val imei = context.getSystemService(context.TELEPHONY_SERVICE).deviceId

缺点

  • 由以上可以看出使用IMEI来作为Android的设备唯一标识符存在一定的弊端,如果APP未涉及电话功能,却要申请电话权限涉及隐私问题,如果用户禁用掉相关权限,将获取不到。
  • Android 10以后 需要READ_PRIVILEGED_PHONE_STATE权限才能访问,这个权限为厂商拥有的权限,普通app没有这个权限,所以取到的为null。

2.2 ANDROID_ID

在设备首次运行的时候,系统会随机生成一64位的数字,并把这个数值以16进制保存下来,这个16进制的数字就是ANDROID_ID,但是如果手机恢复出厂设置这个值会发生改变,如果设备被root,这个值可以任意改变。

	val androidID = Secure.getString(context.contentResolver, Secure.ANDROID_ID)

缺点

  • 手机恢复出厂设置以后该值会发生变化
  • 在国内Android定制的大环境下,有些设备是不会返回ANDROID_ID的

2.3 Serial Number


                
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值