Android 中获取设备id一直是老生常谈的事情,先说下名词解释

  • Device ID:设备ID。
  • IMEI:International Mobile Equipment Identity,国际移动设备身份码的缩写。是由15位数字组成的“电子串号”,它与每台手机一一对应,每个IMEI在世界上都是唯一的。
  • IDFA:Identifier For Advertising,iOS独有的广告标识符。
  • UDID:Unique Device Identifier,唯一设备标识码。
  • UUID:Universally Unique Identifier,通用唯一识别码。目前最广泛应用的UUID,是微软公司的全局唯一标识符GUID。其目的是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。
  • ANDROID_ID:在 Android 8.0(API 级别 26)和更高版本的平台上,一个 64 位数字(表示为十六进制字符串),对于应用签名密钥、用户和设备的每个组合都是唯一的值。

今天我们先说一下获取deviceId的方法:

/*** 获取deviceId(手机唯一的标识)** @param context* @return*/
@SuppressLint({"HardwareIds", "NewApi", "MissingPermission"})
public static String getDeviceId(Context context) {String deviceId;if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {deviceId = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);} else {final TelephonyManager mTelephony = (TelephonyManager) context.getSystemService(TELEPHONY_SERVICE);if (context.checkSelfPermission(Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {return "";}assert mTelephony != null;if (mTelephony.getDeviceId() != null) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {deviceId = mTelephony.getImei();} else {deviceId = mTelephony.getDeviceId();}} else {deviceId = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);}}return deviceId;
}

获取Mac地址的方法在Android 11及以上版本已经不建议了,因为获取的mac地址都是一样的.

获取设备id前先要请求权限,读取设备标识信息,在Android 11及以上多了一个权限,

可以看到除了READ_PHONE_STATE之外,还有一个READ_PHONE_NUMBERS

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

MainActivity代码:

 核心代码如上图红框处,我们直接看运动的效果图和日志:

本文已经适配了Android 11的读取设备信息权限,等到公司后拿测试机打印一下日志,当然本文还有很多不全面的地方,比如手机没有插sim卡imei是读取不到或者有多个sim卡也是不准确的,uuid和设备id在卸载app或者刷机情况下也不准确,本文的deviceId经过测试卸载App下次在获取也是同一个,最后说一下权限拒绝我没有处理,后面也会补充完整的udid的获取方法和官方文档api.

Android中关于Deviceid的那些事相关推荐

  1. Android中那些有你不知道的事

    在安卓开发中,总有那么一些看似简单,实则绊脚的难题,等你去探索,等你去解决,也许你已经遇见了解决了,也许你还没碰上,写下这篇总结,希望能帮助那行即将遇到的朋友,快速解决这些小问题! 一.activit ...

  2. Android中你可能忽略的知识点(1)-分辨率那些事

    一.dp/dip.px.sp.dpi基本概念 dp/dip(device independent pixels) 设备独立像素 与设备有关系 对角线每英寸的像素点的个数 px 像素,pixel的缩写. ...

  3. android vector 圆形,Android中矢量图形的那些事 - SVG or Vector

    之前对矢量图形有所耳闻,但因为Android对于矢量图形的原生支持较晚,所以一直没好好研究过(16年2月25就出来的东西,其实就是懒 =.=).最近工作上正好遇到一个产品需求,想用SVG来解决,借此机 ...

  4. Android中LayoutInflater的使用

    Inflater英文意思是膨胀,在Android中应该是扩展的意思吧. LayoutInflater 的作用类似于 findViewById(),不同点是LayoutInflater是用来找layou ...

  5. 从Android中Activity之间的通信说开来

    引言 最近两个星期在研究android的应用开发,学习了android应用开发的基础知识,基本控件,基本布局,基本动画效果,数据存储,http访问internet等等基础知识. android中有一个 ...

  6. android中常用的快捷键

    2019独角兽企业重金招聘Python工程师标准>>> android中常用的快捷键 Eclipse快捷键-方便查找,呵呵,记性不好 行注释/销注释 Ctrl+/  块注释/销注释/ ...

  7. 接口文档示例_在示例中使用Android中的Work Manager

    接口文档示例 在本文中,我们将介绍如何在android中使用工作管理器. 工作管理器是android体系结构组件的一部分,并且可以很好地替代所有先前的调度选项. 其他调度选项,例如JobSchedul ...

  8. Java I/O在Android中应用(一)

    Java I/O在Android中应用(一) 前言(废话) 本来想周末拉一拉进度的,结果跑完10KM马拉松之后,发现自己已经完全没有力气再去做任何事情了. 讲一些日常的事情吧,最近家里人说要给我介绍对 ...

  9. 在Android中使用AspectJ进行切面编程的简易步骤

    最近有做用户行为统计的需求,为了尽可能使统计代码不侵入业务代码,就研究了下hook和Aop. 之前写的hook方面的文章里,有评论给出了些建议,于是研究了下AspectJ,虽然还是不能完美解决项目中的 ...

  10. Android中开发习惯

    我觉得首先是命名规范.命名规范这种东西每个人都有自己的风格,Google 也有自己的一套规范(多看看 Android 系统源码就明白了).好的规范可以有效地提高代码的可读性,对于将来接手代码的小伙伴也 ...

最新文章

  1. Unity应用架构设计(11)——一个网络层的构建
  2. java 数据库连接池 开源_开源自己开发的一个JAVA数据库连接池,效果还算可以。...
  3. python __future__ 的几种特性
  4. 计算机论文的写作方法有哪些,计算机专业论文的写作方法.ppt
  5. spring-cloud-starter-openfeign使用详解
  6. aws cli_学习AWS CLI:AWS CLI概述(AWS命令行界面)
  7. mysql通用mapper_SpringBoot集成tk.mapper通用mapper,针对特殊业务也可写xml文件sql
  8. Java为什么不允许覆盖静态方法?
  9. Java I/O系统之Print 流
  10. 146.PHP $_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 的区别
  11. Termux字体大小调整
  12. 光模块发射光功率和接收灵敏度介绍
  13. 卷积系列:Deconvolution(反卷积)/Transpose Convolution(转置卷积)/Fractional convolution
  14. 新唐M251 CORTEX-M23内核移植TencentOS tiny教程
  15. 关于wss的简单理解
  16. 查看windows系统许可证过期日期方法
  17. 使用freesurfer和3Dslicer进行脑区分割和电极定点(日常记录)
  18. wechall靶场training系列通关记录
  19. allegro 进行outline倒角
  20. 阿木有专门讲MAVROS功能包节点的课,有讲MAVROS怎么订阅消息,发布消息。看来MAVROS这边的编程不用太担心。

热门文章

  1. matlab连通区域统计,MATLAB bwlabel函数 统计连通区域
  2. 百问网7天物联网智能家居 学习心得 打卡第三天
  3. 全球及中国石头纸行业发展动态与投资现状分析报告2022版
  4. 胡玉平 计算机科学,基于代价敏感混合分裂策略的多决策树算法
  5. Undefined symbol main (referred from entry9a.o).
  6. linux硬盘的两个分区合并_linux新加硬盘合并
  7. 多网卡多网关设置错误:RTNETLINK answers: File exists
  8. Unity3d用脚本实现Button图片的更改
  9. 全家福缺一个人怎么P图上去-免费+效果好
  10. 双稳态电路的两个稳定状态是什么_一文为你详解继电器的工作原理及电路