android 设备唯一码

来源:互联网 发布:淘宝金丝绒裙子图片 编辑:程序博客网 时间:2024/06/10 17:51

最近需要用到android设备唯一码,从网上查了一些资料,并没有一个完美的解决方法,下面列出一些可能使用的android系统字段。

  1. IMEI : (International Mobile Equipment Identity) 是国际移动设备身份码的缩写,国际移动装备辨识码,是由15位数字组成的"电子串号",它与每台手机一一对应,而且该码是全世界唯一的。需要权限READ_PHONE_STATE,另外由于厂商定制,其冲突率大于 3%

  2. IMSI:sim卡序列号,需要READ_PHONE_STATE权限。

  3. DEVICE_ID:根据不同的手机设备返回IMEIMEID或者ESN码。1.需要READ_PHONE_STATE2.厂商定制系统中的Bug。

  4. MacAddress 需要android.permission.ACCESS_WIFI_STATE权限,但可以使用java代码绕过android权限获得

  5. Serial Number:可以通过android.os.Build.SERIAL获取,初衷是为了做没有sim的设备的唯一码的,目前看有sim卡的设备也有这个值。

  6. ANDROID_ID :是设备第一次启动时产生和存储的64bit的一个数,当设备被wipe后会被重置。ANDROID_ID似乎是获取设备唯一标识的一个好选择,但它也有缺陷:1.在主流厂商生产的设备上,有一个很经常的bug,就是每个设备都会产生相同的ANDROID_ID9774d56d682e549c2.厂商定制系统的Bug:有些设备返回的值为null

以上基本就是我们可以使用的所有字段了。首先需要权限的不能使用,因为权限是不稳定的,今天用户赋予权限,明天可能就把权限收回,如果使用了需要权限的字段,我们生成的设备唯一码就会跟着权限变,就不是设备唯一码了。

所以我们能用的就只有MacAddress,SerialNumber,ANDROID_ID。字段确定好了,实现思路就简单了。为了保证设备唯一码的稳定性,生成唯一码后要尽量保存在文件系统中,手机内存,sd都保存一遍,下次取值的时候首先从文件系统中取,取不到在生成。