设备ID(DeviceId)

  • 获取办法

     android.telephony.TelephonyManager tm = (android.telephony.TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    String deviceId = tm.getDeviceId();
  • 当设备为手机时,返回设备的唯一ID。手机制式为 GSM 时,返回手机的 IMEI 。手机制式为 CDMA 时,返回手机的 MEID 或 ESN 。
  • 非电话设备或者 Device ID 不可用时,返回 null .
  • 属于比较稳定的设备标识符。
  • 需要 READ_PHONE_STATE 权限。 (Android 6.0 以上需要用户手动赋予该权限)。
  • 某些设备上该方法存在 Bug ,返回的结果可能是一串0或者一串*号。

Sim 序列号(Sim Serial Number)

  • 获取办法

     android.telephony.TelephonyManager tm = (android.telephony.TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    String simSerialNum = tm.getSimSerialNumber();
  • 不同 Sim 卡的序列号不同.
  • Sim 卡序列号,当手机上装有 Sim 卡并且可用时,返回该值。手机未装 Sim 卡或者不可用时,返回 null.
  • 需要 READ_PHONE_STATE 权限。 (Android 6.0 以上需要用户手动赋予该权限)

Mac 地址(Mac Address)

  • 获取办法

     android.net.wifi.WifiManager wifi = (android.net.wifi.WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    String macAddress = wifi.getConnectionInfo().getMacAddress();
  • 没有 WiFi 硬件或者 WiFi 不可用的设备可能返回 null 或空,注意判空.
  • 比较稳定的硬件标识符。
  • 需要 ACCESS_WIFI_STATE 权限。

设备序列号(Serial Number, SN)

  • 获取办法:

     String serialNum = android.os.Build.SERIAL;
  • 比较稳定的设备硬件标识符,谷歌也未提到有啥缺点。

ANDROID_ID

  • 获取办法:

     String androidId = android.provider.Settings.Secure.getString(context.getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
  • 在设备第一次启动的时候生成并保存,并且可能会在恢复出厂设置后重置该值。理论上是大部分是重置的。(API 中原话是:The value may change if a factory reset is performed on the device.)
  • 在 Android 2.2 中不可靠.
  • 部分设备由于制造商错误实现,导致会返回相同的 Android_ID.
  • 在 Android 4.2 及以上, 设备启用多用户功能后,每个用户的 Android_ID 不相同.

参考:

[1].http://www.jianshu.com/p/b6f4b0aca6b0?utm_campaign=haruki

[2].http://stackoverflow.com/questions/2785485/is-there-a-unique-android-device-id/2853253#2853253

Android设备标识符的使用的更多相关文章

  1. 获取Android设备标识符

    Android开发中有时候因业务需要客户端要产生一个唯一的标识符使服务器能识别某台Android设备,目前一般使用三种标识符分别为DeviceId.AndroidId.MAC地址. 获取DeviceI ...

  2. 关于如何惟一地标识一台Android设备的综合性讨论

    想必大家在开发Android项目的时候,多多少少会遇到“如何惟一地标识一台Android设备”等类似的问题.不只是以前,即使是现在乃至可以预见的将来,这个问题都将一直存在. 如果大家使用搜索工具搜索的 ...

  3. 稳定获取Android设备唯一码(UUID)的解决方案

    最近做的一个项目中需要用到Android设备唯一码(UUID)来标识一台设备, Android中设备唯一码有很多,如:MAC地址.IMEI号(DeviceId).IMSI号.ANDROID_ID.序列 ...

  4. chorme浏览器调试Android设备

    Android设备开启开发者模式,并打开USB调试: 接着在Android设备上运行项目 在chrome浏览器打开F12: 在Remote devices里即可调试页面. ! 一般需要FQ

  5. 无线连接Android设备

    有时设备处于低电,此时又需要进行设备与PC的数据传输,但是通过USB连接充电速度太慢.这时就可以通过无线进行传输数据,然后通过AC充电.一举两得. 前提: 1.在Android设备的开发者模式-打开U ...

  6. 制作bat脚本,抓取Android设备logcat

    ::bat制作抓取Android设备的logcat,并保存以时间命名的txt文件至设备目录 1 @ECHO off adb wait-for-device ECHO 正在连接设备 adb logcat ...

  7. 电脑控制Android设备的软件——Total Control

    最早开始搞Android开发时,为了调试方便,想找一个Android下的远程控制软件,支持在电脑端远程控制和同步显示Android设备.先后试了360手机助手.Mobizen.Vysor和Mirror ...

  8. python Windows下的android设备截图工具

    目录 界面版 命令行版 界面版 利用python的wx库写个ui界面,用来把android设备的截图输出到电脑屏幕,前提需要安装adb,涉及到的python库也要安装.代码如下: #!/usr/bin ...

  9. Python写一个Windows下的android设备截图工具

    界面版 利用python的wx库写个ui界面,用来把android设备的截图输出到电脑屏幕,前提需要安装adb,涉及到的python库也要安装.代码如下: import wx,subprocess,o ...

随机推荐

  1. 【C#版本详情回顾】C#3.0主要功能列表

    隐式类型的本地变量和数组 在与本地变量一起使用时,var 关键字指示编译器根据初始化语句右侧的表达式推断变量或数组元素的类型 对象初始值设定项 支持无需显式调用构造函数即可进行对象初始化 集合初始值设 ...

  2. Android服务开发经验——优雅地活着

    大多数的Android应用开发都会将注意力集中在界面功能上,只有少数应用会需要一个Service,尤其是一个长期运行的Service,去进行后台联网.环境检测.媒体播放等功能.Android环境下的S ...

  3. 有关Android存储的相关概念辨析

    我想念许多Android开发人员在碰到有关存储的相关问题时,肯定遇到过“内部存储/内存”.“外部存储/外存”等类似的概念,尤其是将相关概念跟非开发人员解释时,那真是“秀才遇到兵,有理说不清哪”.包括我 ...

  4. Linq无聊练习系列6--Any/All/Contains/Concat/Union/Intersect/Except/take/skip/SqlMethods操作练习

    /*********************Any/All/Contains/Concat/Union/Intersect/Except/take/skip/SqlMethods操作练习******* ...

  5. printf code

    printf背后的故事 2014-01-14 21:54 by Florian, 41 阅读, 0 评论, 收藏, 编辑 printf背后的故事 说起编程语言,C语言大家再熟悉不过.说起最简单的代码, ...

  6. [Usaco2007 Dec]Building Roads 修建道路[最小生成树]

    Description Farmer John最近得到了一些新的农场,他想新修一些道路使得他的所有农场可以经过原有的或是新修的道路互达(也就是说,从任一个农场都可以经过一些首尾相连道路到达剩下的所有农 ...

  7. MongoDB:利用官方驱动改装为EF代码风格的MongoDB.Repository框架 六:支持多数据库操作

    本次主要内容:修正MongoDB.Repository框架对多数据库的支持. 在之前的五篇文章中对MongoDB.Repository框架做了简单的介绍是实现思路.之前是考虑MongoDB.Repos ...

  8. Leetcode: 06/01

    今天完成了三道题目,总结一下: 1: Length of last word(细节实现题) 此题有一些细节需要注意(比如 “a_ _” 最后一个单词是a, 而不是遇到空格就直接算成没有),别的基本就是 ...

  9. 在html中使用javascript显示本地图片的

    <html> <head> <script type="text/javascript"> function getFullPath(obj){ ...

  10. IOS学习之路八(GCD与多线程)

    GCD,全称Grand Central Dispath,是苹果开发的一种支持并行操作的机制.它的主要部件是一个FIFO队列和一个线程池,前者用来添加任务,后者用来执行任务. GCD中的FIFO队列称为 ...