当前位置:   article > 正文

Android获取设备唯一标识

android获取设备唯一标识

一、IMEI:国际移动设备识别码的缩写,其总长为15位,每位数字仅使用0~9的数字。
双卡双待会有两个IMEI值,并且在Android10以后就无法获取到了,而且在模拟器中是可以修改的,所以该值无法作为识别设备唯一的标识。(如果只带有Wifi的设备或者音乐播放器没有通话的硬件功能的话就没有这个IMEI值)
IMEI的获取方式:
1、Android6.0以前,无需任何权限通过getDeviceId()方法获取到IMEI码(GSM设备返回的是IMEI码,CDMA设备返回的是MEID码或者ESN码);
2、Android6.0-Android8.0之间,需要申请READ_PHONE_STATE权限通过getDeviceId()方法获取到IMEI码;
3、Android8.0及以上,可以通过getImei()方法获得(getDeviceId方法在Android 8.0及之后的版本已经被废弃了)
4、Android10及以上,targetSdkVersion小于29的话,有权限可以获取到Imei,大于等于29就会报异常了

二、Mac
手机Wifi或蓝牙的MAC地址
并不是所有的设备都有wifi和蓝牙,且需要权限,在 Android 6.0(API 级别 23)到 Android 9(API 级别 28)中,本地设备 MAC 地址(如 WLAN 和蓝牙)无法通过第三方 API 使用。WifiInfo.getMacAddress() 方法和BluetoothAdapter.getDefaultAdapter().getAddress() 方法都会返回 02:00:00:00:00:00

三、ANDROID_ID
可以通过 Settings.System.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID)获取到,当设备恢复出厂设置,或者Root过的话,该值会被改变。

四、PsuedoID
该方式是通过拼接硬件信息获取到的,网上有很多demo,代码如下:
代码
该方法也无法保证唯一性,但是概率极低就是。

解决方案:
Android 8.0以下 判断设备唯一性可用 PsuedoID + DeviceId
Android 8.0及以上 判断设备唯一性可用 PsuedoID + ANDROID_ID

备注:
1、获取DeviceId是需要权限的,如果用户用户拒绝了权限,我们可以不让使用,或者其它值代替DeviceId(暂未想到,哈哈~~)
2、PsuedoID方法中,获取serial,在大于等于26的api中都是返回unknow(https://developer.android.com/reference/android/os/Build.html#SERIAL)
3、谷歌建议使用AndroidID(https://developer.android.com/training/articles/user-data-ids)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/242522
推荐阅读
相关标签
  

闽ICP备14008679号