转载请标明出处:http://blog.csdn.net/xx326664162/article/details/50511283 文章出自:薛瑄的博客

你也可以查看我的其他同类文章,也会让你有一定的收货!

1. DEVICE_ID

假设我们确实需要用到真实设备的标识,可能就需要用到DEVICE_ID。它根据不同的手机设备返回IMEI,MEID或者ESN码,但它在使用的过程中会遇到很多问题:

1)非手机设备: 如果只带有Wifi的设备或者音乐播放器没有通话的硬件功能的话就没有这个DEVICE_ID

2)权限: 获取DEVICE_ID需要READ_PHONE_STATE权限,但如果我们只为了获取它,没有用到其他的通话功能,那这个权限有点大才小用

3)bug:在少数的一些手机设备上,该实现有漏洞,会返回垃圾,如:zeros(全是0)或者asterisks(星号)的产品

使用方法:

TelephonyManager.getDeviceId()//获取DEVICE_ID

2. Sim Serial Number

所有的GSM设备 (测试设备都装载有SIM卡) 可以返回一个TelephonyManager.getSimSerialNumber()

所有的CDMA 设备对于 getSimSerialNumber() 却返回一个空值!

使用方法:

TelephonyManager.getSimSerialNumber()

3. Serial Number

没有电话功能的设备被要求必须提供这个序列号。

有电话功能的,我使用的是华为C8817E,也是有这个值的。

Android studio 调试窗口,有一列显示的就是Serial Number

使用方法:

return android.os.Build.SERIAL

4. MAC ADDRESS

通过手机的Wifi或者蓝牙设备获取MAC ADDRESS作为DEVICE ID,但是并不建议这么做,因为:

硬件限制:并不是所有的设备都有Wifi和蓝牙硬件,硬件不存在自然也就得不到这一信息。

获取的限制:如果Wifi没有打开过,是无法获取其Mac地址的;而蓝牙是只有在打开的时候才能获取到其Mac地址。

5. ANDROID_ID

ANDROID_ID是设备第一次启动时产生和存储的64bit的一个数,当设备被wipe后会被重置。ANDROID_ID似乎是获取设备唯一标识的一个好选择,但它也有缺陷:

它在Android <=2.1 or Android >=2.3的版本是可靠、稳定的,但在2.2的版本并不是100%可靠的

在主流厂商生产的设备上,有一个很经常的bug,就是每个设备都会产生相同的ANDROID_ID:9774d56d682e549c

厂商定制系统的Bug:有些设备返回的值为null。

设备差异:对于CDMA设备,ANDROID_ID和DEVICE_ID是相同的值

使用方法:

//返回一个字符串

android.provider.Settings.Secure.getString(getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);

6. Installtion ID : UUID

更多:http://blog.sina.com.cn/s/blog_6489d55b01012q8t.html

以上四种方式存在的一定的局限性或者bug,另外一种方式解决,就是使用UUID,该方法无需访问设备的资源,也跟设备类型无关。

这是一个自定义的值:

自定义生成UUID ,可根据上述的几种方式,生成UUID,作为唯一标志。参考:最后的示例

下面这段话引用这篇文章

在程序第一次安装运行后生成一个ID(注意:是自己生成,而非系统主动生成的!),但该方式跟设备唯一标识不一样,它会因为不同的应用程序而产生不同的ID,而不是设备唯一ID。因此经常用来标识在某个应用中的唯一ID(即Installtion ID),或者跟踪应用的安装数量。

“它会因为不同的应用程序而产生不同的ID”,这句是错误的,因为是自定义的,所以不同的应用程序,可能不一样也可能一样,甚至相同的应用程序,不同的机型都一样。UUID完全自定义。

示例:

可以使用 String.hashCode() 加密序列号

final TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE);

final String tmDevice, tmSerial, tmPhone, androidId;

tmDevice = "" + tm.getDeviceId();

tmSerial = "" + tm.getSimSerialNumber();

androidId = "" + android.provider.Settings.Secure.getString(getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);

UUID deviceUuid = new UUID(androidId.hashCode(), ((long)tmDevice.hashCode() << 32) | tmSerial.hashCode());

String uniqueId = deviceUuid.toString();

参考:http://www.cnblogs.com/xiaowenji/archive/2011/01/11/1933087.html

http://www.cnblogs.com/lqminn/p/4204855.html

关注我的公众号,轻松了解和学习更多技术

查看 android 设备号,获取Android设备的唯一识别码|设备号|序号|UUID相关推荐

  1. Qt获取计算机硬件信息(主板唯一识别码)

    Windows下获取CPU.主板.硬盘等电脑相关硬件的办法很多,可以直接调用Windows API的方式实现,不过代码都很复杂,不容易理解.这里使用一种很简便的方式来查询我们需要的信息,先了解一个东西 ...

  2. android 摄像头参数,获取Android设备上的详细的摄像头信息

    原标题:获取Android设备上的详细的摄像头信息 如何获取Android设备上的详细的摄像头信息呢? 目前Samsung的Galaxy Tab和Nexus S均有前置摄像头,获取Android摄像头 ...

  3. Android之如何获取Android设备的唯一识别码笔记

    因为需要在项目中需要获得一个稳定.可靠的设备唯一识别码,因此搜了一些网上的资料.今天我们将介绍几种方式. 1. DEVICE_ID 假设我们确实需要用到真实设备的标识,可能就需要用到DEVICE_ID ...

  4. android隐藏系统ui_如何在非库存设备上获取Android的系统UI调谐器

    android隐藏系统ui One benefit users of stock Android devices have had for the past few iterations of the ...

  5. android来电电话获取,Android获取来电号码代码

    对于Android平台的整个来电软件制作十分简单,Android平台在各方面都比较智能,加上一个BOOT_COMPLETED获取,保证开机自动运行,一个来电通就很容易的制作完成了. Android来电 ...

  6. Android 命令su,获取Android的ROOT权限其实很简单,只要在Runtime下执行命令su就可以了。复制代码 代码如下:// 获取ROOT权限public void...

    获取Android的ROOT权限其实很简单,只要在Runtime下执行命令"su"就可以了. // 获取ROOT权限 public void get_root(){ if (is_ ...

  7. android 获取设备旋转角度,获取Android设备的方向,Sensor和SensorManager实现手机旋转角度...

    http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1009/425.html 带有g-sensor的Android设备上可通过API ...

  8. android读出序列号,获取android手机序列号

    这里的序列号可能是广义上的序列号,由底层属性ro.serialname决定 通用的获取方式 Java代码 public static String getSerialNumber(){ String ...

  9. android jks sha1,获取Android SHA1 、生成jks密钥、签名Apk

    获取应用包名. 打开Android 应用工程的 AndroidManifest.xml配置文件,package 属性所对应的内容为应用包名. 获取 Sha1 值. 目前(2016/06/06)为止,各 ...

最新文章

  1. 裸设备 linux,Linux平台下裸设备的绑定:
  2. CI类实现session基本用法
  3. 基于用户画像的实时异步化视频推荐系统
  4. 【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 2.)(python/c/c++版)(笔记)
  5. html表格分页无插件,wordpress无插件实现单篇文章分页显示
  6. 利用 UML 进行实体关系建模
  7. 使用多行sql字符串时,要注意不要忽略了空格
  8. LinkedHashSet
  9. Android--Launcher拖拽事件详解【androidICS4.0--Launcher系列二】
  10. Delphi LiveBinds组件
  11. Asp.Net Core Mvc上Json序列化首字母大小写的问题
  12. Java三月春招面试经历分享(没offer不是我的锅)
  13. cmmi实践访谈测试ppt_CMMI3_实践篇.ppt
  14. 使用git进行word版本管理
  15. 这几款可以识别图片文字的app值得一试
  16. 高级算法日记9:图(2)
  17. 2013-07-22 码市-武汉 返程票
  18. 【操作教程】AI安防监控智能视频平台EasyCVR如何重置密码?
  19. Java基础-基础知识汇总
  20. 大二学计算机专业职业规划,大学生计算机专业职业生涯规划2000字

热门文章

  1. 转:浙大高分子物理郑强教授的震撼人心的演讲
  2. 学Python该看什么书?所有方向的精华好书推荐,18年老程序员倾囊相授!
  3. 关于硬件工程师的真相:敢问路在何方?
  4. IBHLink S7++ 模块 AEG 调功器 Thyro-S 1S 400-100 HRL1
  5. GNSS观测值质量分析必备基础知识
  6. 英语说10点20有计算机课,博雅课选课指南(1)
  7. java中jam_Jam的计数法 (Java代码)
  8. Python-QRCode使用
  9. 拿什么拯救你,我的大规模杀伤性武器--Nokia!
  10. 批量更新用户mous余额