Android下获取设备唯一标识(UDID, DeviceID...)

android下获取设备唯一标识原本非常简单(至少不会像iOS一样禁用这个,禁用那个),但是由于设备的多样性需要考虑的东西也对应复杂起来。

先附上完整代码

[java] view plaincopy

  1. protected static final String PREFS_FILE = "gank_device_id.xml";
  2. protected static final String PREFS_DEVICE_ID = "gank_device_id";
  3. protected static String uuid;
  4. static public String getUDID()
  5. {
  6. if( uuid ==null ) {
  7. synchronized (GankMainActivity.class) {
  8. if( uuid == null) {
  9. final SharedPreferences prefs = s_instance.getSharedPreferences( PREFS_FILE, 0);
  10. final String id = prefs.getString(PREFS_DEVICE_ID, null );
  11. if (id != null) {
  12. // Use the ids previously computed and stored in the prefs file
  13. uuid = id;
  14. } else {
  15. final String androidId = Secure.getString(s_instance.getContentResolver(), Secure.ANDROID_ID);
  16. // Use the Android ID unless it‘s broken, in which case fallback on deviceId,
  17. // unless it‘s not available, then fallback on a random number which we store
  18. // to a prefs file
  19. try {
  20. if (!"9774d56d682e549c".equals(androidId)) {
  21. uuid = UUID.nameUUIDFromBytes(androidId.getBytes("utf8")).toString();
  22. } else {
  23. final String deviceId = ((TelephonyManager) s_instance.getSystemService( Context.TELEPHONY_SERVICE )).getDeviceId();
  24. uuid = deviceId!=null ? UUID.nameUUIDFromBytes(deviceId.getBytes("utf8")).toString() : UUID.randomUUID().toString();
  25. }
  26. } catch (UnsupportedEncodingException e) {
  27. throw new RuntimeException(e);
  28. }
  29. // Write the value out to the prefs file
  30. prefs.edit().putString(PREFS_DEVICE_ID, uuid).commit();
  31. }
  32. }
  33. }
  34. }
  35. return uuid;
  36. }

1、正常情况下可以通过((TelephonyManager) s_instance.getSystemService( Context.TELEPHONY_SERVICE )).getDeviceId();  来获取,但是某些平板电脑此函数会返回空

2、通过 Secure.getString(s_instance.getContentResolver(), Secure.ANDROID_ID);   也可以获取到一个id,但是android2.2或者是某些山寨手机使用这个也是有问题的,它会返回一个固定的值 9774d56d682e549c

3、如果前两个都没有获取到udid,那么就在程序启动的时候创建一个随机的uuid,然后保存起来。这个算是兼容方案,当然这样的设备并不会很多。

时间: 2024-10-12 05:14:57

Android下获取设备唯一标识(UDID, DeviceID...)的相关文章

iOS获取设备唯一标识的各种方法?IDFA、IDFV、UDID分别是什么含义?

iOS获取设备唯一标识的各种方法?IDFA.IDFV.UDID分别是什么含义? [摘要:1.UDID (Unique Device Identifier) UDID的齐称是Unique Device Identifier,望文生义,它便是苹果IOS装备的独一辨认码,它由40个字符的字母战数字构成.正在良多须要限定] 一.UDID (Unique Device Identifier) UDID的全称是Unique Device Identifier,顾名思义,它就是苹果IOS设备的唯一识别码,它由

ios开发——实用技术篇OC篇&获取设备唯一标识

获取设备唯一标识 WWDC 2013已经闭幕,IOS7 Beta随即发布,界面之难看无以言表...,简直就是山寨Android. 更让IOS程序猿悲催的是,设备唯一标识的MAC Address在IOS7中也失效了. IOS系统中,获取设备唯一标识的方法有很多: 一.UDID(Unique Device Identifier) UDID的全称是Unique Device Identifier,顾名思义,它就是苹果IOS设备的唯一识别码,它由40个字符的字母和数字组成. 二.UUID(Univers

[转] iOS7如何获取设备唯一标识

@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); WWDC 2013已经闭幕,I

iOS获取设备唯一标识的8种方法

8种iOS获取设备唯一标识的方法,希望对大家有用. UDID UDID(Unique Device Identifier),iOS 设备的唯一识别码,是一个40位十六进制序列(越狱的设备通过某些工具可以改变设备的 UDID),移动网络可以利用 UDID 来识别移动设备. 许多开发者把 UDID 跟用户的真实姓名.密码.住址.其它数据关联起来,网络窥探者会从多个应用收集这些数据,然后顺藤摸瓜得到这个人的许多隐私数据,同时大部分应用确实在频繁传输 UDID 和私人信息. 为了避免集体诉讼,苹果最终决

IOS获取设备唯一标识的八种方法

免责声明:本文章来源于其他博客整理 参考:http://www.2cto.com/kf/201308/237648.html 参考:http://www.2cto.com/kf/201311/255684.html 在iOS系统中,获取设备唯一标识的方法有很多: 一.UDID(Unique Device Identifier) UDID的全称是Unique Device Identifier,它就是苹果IOS设备的唯一识别码,它由40个字符的字母和数字组成(越狱的设备通过某些工具可以改变设备的U

iOS开发日记20-7.0之后获取设备唯一标识

今天博主有一个获取设备唯一标识的需求,遇到了一些困难点,在此和大家分享,希望能够共同进步. 在iOS7.0之前,获取设备唯一标识的方法主要是获取UDID或MAC地址,但是在iOS7.0之后,为了保护用户隐私,苹果把他们都禁止了,使得设备的数据追踪变得越来越难. iOS7.0之后,获取设备唯一标识的方法主要有两种: 1.广告标识符 IDFA 苹果为了完善自己的生态圈,在2010年前后推出了iAd广告网络.那么这个IDFA和这个iAd的关系就不言自喻了.如果不了解广告也没关系,简单来讲,现在的互联网

利用网卡地址和OpenUDID,实现获取设备唯一标识的一种方案

网卡地址(<iOS7的系统) 通过Unix级别的API去获取Wifi的网卡地址. 该方法属于UDID替代方案中最为准确的一种,因为网卡地址不会因为刷机.还原设备而发生改变.故追求唯一性的厂商多选择此种方案! 在iOS7之后,应用已经无法获取网卡地址,该方案在iOS7中也已经被废弃,所以可用于iOS7以前的系统. OpenUDID(>=iOS7的系统) 开源的一个UDID替代方案,原理是利用应用间的剪贴板共享和本地一些必要的缓存信息,让多个应用间共享一个UUID. OpenUDID在官方废弃UD

获取设备唯一标识

_currentDeviceID = [[self getDeviceID] UUIDString]; // 1.获取设备唯一标识: - (NSUUID*) getDeviceID{    UIDevice *device = [UIDevice currentDevice];    return device.identifierForVendor;}

(转)iOS获取设备唯一标识码

文/举个栗子wow(简书作者)原文链接:http://www.jianshu.com/p/65c92cd1c0ee著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. “刷优惠券”就是刷美团或者大众这些做首单优惠的App的优惠券,它们为“首单”创造了几个制约因素,其中一个就是设备的唯一性——参加过的不能再参加,这就要获取的设备的唯一标识.这项技能一度使我在大学里吃牛排看电影不要钱.有点跑题,回到正题上.我查阅了一些资料,了解了一下iOS下是如何做到“设备标识的唯一性的”.不得不说iOS