Android是否有唯一的设备ID,如果有的话,该怎样快速有效获取?

Settings.Secure#ANDROID_ID 返回Android ID ,是一个64位的16进制字符串

1
2
3
import android.provider.Settings.Secure;
private String android_id = Secure.getString(getContext().getContentResolver(),Secure.ANDROID_ID);

关于这个问题有很多的答案,不过其中大部分将只能算是答对了一部分,还不够好。

根据我在很多设备上的测试(所有的电话,至少有一个是无效的)

  1. 所有设备针对 TelephonyManager.getDeviceId() 测试都有返回值
  2. 所有GSM设备(都有SIM卡)针对 TelephonyManager.getSimSerialNumber() 测试都有返回值
  3. 所有CDMA设备针对 getSimSerialNumber() 测试返回 NULL(预期中的)
  4. 所有有谷歌帐户的设备都返回了 ANDROID_ID 值
  5. 所有的CDMA设备针对 ANDROID_ID 和 TelephonyManager.getDeviceId() 都返回相同的值(或派生自同一个值) - 前提是安装过程中已经添加了谷歌帐户。
  6. 我还没有机会测试没有SIM卡的GSM设备,没有谷歌账户的GSM设备,以及任何在飞行模式下的设备。

所以,如果你想要得到设备本身的唯一值, TM.getDeviceId()应该是足够了。不过显然的,有些用户比其他人更加偏执一些,可以将这些标识中的一个或者多个进行hash运算就很有用,生成的字符串仍然可以唯一标识该设备,但是不会明确的标识实际的设备。例如,使用String.hashCode(),再加上一个UUID:

1
2
3
4
5
6
7
8
9
final TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE);
final String tmDevice, tmSerial, 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 deviceId = deviceUuid.toString();

结果可能类似 :00000000-54b3-e7c7-0000-000046bffd97

对我来说这种方式已经足够了

别忘了增加权限,用于读取 TelephonyManager properties,在manifest 中增加下面一行:

1
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

Android能够获取到唯一的设备ID吗?相关推荐

  1. android代码获取deviceid,获取安卓系统的设备id用getDeviceId()函数

    来源:网络 | 2012-12-18 | (有12829人读过) 贴段具体例子代码,用来说明,安卓系统下,如何获取设备id的一段小例子供大家参考: 在计算机上,我们习惯用MAC地址来标志一台计算机.在 ...

  2. Android系统信息获取 之八:WIFI设备和WIFI信号信息获取

    通过分析WifiManager.Java,WifiINfo.java源码,我们可以发现WIFI设备信息和WIFI状态的定义. 1.Wifi设备信息中常用的信息有     [java] view pla ...

  3. 怎样获取iPhone/ipad的设备ID(UUID)号?

    iOS程序发布测试之获取Tester设备UDID是本文要介绍的内容,主要介绍了测试过程中获取Tester设备UDID的内容,先来看详细内容. AD: iOS程序发布测试之获取Tester设备UDID是 ...

  4. 是否有唯一的Android设备ID?

    Android设备是否具有唯一的ID,如果是,则使用Java访问它的简单方法是什么? #1楼 有许多不同的方法可以解决这些ANDROID_ID问题(有时可能为null或特定模型的设备总是返回相同的ID ...

  5. 漫谈唯一设备ID,android开发工程师

    设备ID,简单来说就是一串符号(或者数字),映射现实中硬件设备. 如果这些符号和设备是一一对应的,可称之为"唯一设备ID(Unique Device Identifier)" 不幸 ...

  6. Android中获取唯一的id

    文章目录 Android唯一设备ID现状 IMEI MAC地址 唯一Id实现方案 那些硬件适合硬件标识 工具类 Android唯一设备ID现状 设备ID,简单来说就是一串符号(或者数字),映射现实中硬 ...

  7. Android - 获取移动端设备ID标识,分情况

    目前需求:未登录的用户(游客)需要与客服实时通讯,要怎么区分用户消息? 思路:获取游客的设备ID,以此为标识传给服务器来查询/发送信息,一设备为一用户. 那设备ID是什么?怎么获取呢? 设备ID,就是 ...

  8. 简述Android手机常用的设备ID

    一.简介 1.设备ID: 简单来说就是一串符号(或者数字)类似于我们的身份证号,映射现实中硬件设备.排除特殊情况(模拟器等),设备ID和设备是一一对应的,我们称之为"唯一设备ID(Uniqu ...

  9. android 获取imei(国际移动设备身份码)号码详解及其应用场景

    IMEI简介: IMEI(International Mobile Equipment Identity)是国际移动设备身份码的缩写,国际移动装备辨识码,是由15位数字组成的"电子串号&qu ...

最新文章

  1. python中怎么安装pip-python中怎么安装pip
  2. ThinkPHP3.1快速入门(3)查询语言
  3. mysql5.5 mysqli_php5.5.38增加mysqli扩展
  4. BZOJ 2466 中山市选2009 树 高斯消元+暴力
  5. 飞利浦医疗收购Direct Radiology,加强远程放射学服务能力
  6. HDU 5863 cjj's string game ( 16年多校10 G 题、矩阵快速幂优化线性递推DP )
  7. [cogs] 传染病控制
  8. Git提交代码的流程
  9. 极客书的编程教程合集
  10. linux源码解析-dup_task_struct函数
  11. IJCAI 2022杰出论文公布,大陆作者中稿298篇拿下两项第一
  12. Stanford Algorithms: Design and Analysis, Part 1 [Final Exam]
  13. because of, due to, owing to, on account of,as a result of和thanks to的用法比较
  14. 平衡二叉树(注意LR和RL)
  15. 全系列计算机等级考试题库软件+Office2016
  16. RISC-V Linux 启动流程分析
  17. 华为云如何绑定/解绑二次验证码/虚拟MFA/谷歌身份验证器?
  18. Ladydug5球形全景影像(获取、拼接)
  19. EOS将发布的官方EVM怎么样?
  20. v-show使用三元运算符

热门文章

  1. 大话手游苹果系统多少个服务器,《大话西游》手游iOS系统官服开服公告!
  2. 【人脸识别】HOG特征提取人脸识别【含Matlab源码 641期】
  3. 如何在ubuntu中设置webcam
  4. 数据可视化之Seaborn绘图
  5. python repair修复功能_NI 技术支持|我的插件显示需要修复(REPAIR)了该怎么办?...
  6. java语言程序设计丁振凡ppt_Java语言程序设计(第2版)丁振凡第2章.ppt
  7. 自然语言处理系列二十二》词性标注》词性标注原理》词性介绍
  8. Javaweb零基础学习(壹)
  9. 新西兰公司注册流程概括
  10. 小程序微信小程序设计注册页面