Android获取设备唯一标识

2023-05-16

一、IMEI:国际移动设备识别码的缩写,其总长为15位,每位数字仅使用0~9的数字。
双卡双待会有两个IMEI值,并且在Android10以后就无法获取到了,而且在模拟器中是可以修改的,所以该值无法作为识别设备唯一的标识。(如果只带有Wifi的设备或者音乐播放器没有通话的硬件功能的话就没有这个IMEI值)
IMEI的获取方式:
1、Android6.0以前,无需任何权限通过getDeviceId()方法获取到IMEI码(GSM设备返回的是IMEI码,CDMA设备返回的是MEID码或者ESN码);
2、Android6.0-Android8.0之间,需要申请READ_PHONE_STATE权限通过getDeviceId()方法获取到IMEI码;
3、Android8.0及以上,可以通过getImei()方法获得(getDeviceId方法在Android 8.0及之后的版本已经被废弃了)
4、Android10及以上,targetSdkVersion小于29的话,有权限可以获取到Imei,大于等于29就会报异常了

二、Mac
手机Wifi或蓝牙的MAC地址
并不是所有的设备都有wifi和蓝牙,且需要权限,在 Android 6.0(API 级别 23)到 Android 9(API 级别 28)中,本地设备 MAC 地址(如 WLAN 和蓝牙)无法通过第三方 API 使用。WifiInfo.getMacAddress() 方法和BluetoothAdapter.getDefaultAdapter().getAddress() 方法都会返回 02:00:00:00:00:00

三、ANDROID_ID
可以通过 Settings.System.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID)获取到,当设备恢复出厂设置,或者Root过的话,该值会被改变。

四、PsuedoID
该方式是通过拼接硬件信息获取到的,网上有很多demo,代码如下:
代码
该方法也无法保证唯一性,但是概率极低就是。

解决方案:
Android 8.0以下 判断设备唯一性可用 PsuedoID + DeviceId
Android 8.0及以上 判断设备唯一性可用 PsuedoID + ANDROID_ID

备注:
1、获取DeviceId是需要权限的,如果用户用户拒绝了权限,我们可以不让使用,或者其它值代替DeviceId(暂未想到,哈哈~~)
2、PsuedoID方法中,获取serial,在大于等于26的api中都是返回unknow(https://developer.android.com/reference/android/os/Build.html#SERIAL)
3、谷歌建议使用AndroidID(https://developer.android.com/training/articles/user-data-ids)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android获取设备唯一标识 的相关文章

  • 当请求不是来自 Firebase 控制台时,RemoteMessage.GetNotification() 返回 null?

    我正在测试 Firebase 云消息传递 如果我使用 Firebase 控制台发送消息 在我的代码中我设置了值的通知对象 不是问题 public override void OnMessageReceived RemoteMessage m
  • 解锁设备后 Android Activity 重新启动

    我正在创建一个简单的 Android 项目 但是当用户解锁屏幕 锁定后 时 我的每个活动都会重新启动 这是 Android 应用程序的正常行为吗 或者我必须在清单中处理它 或者别的地方 请帮忙 如果您的目标构建版本是 Honeycomb 3
  • Android ListView数组索引过滤后越界

    我认为这是专家的问题 我接到电话getView with positon 出界来自ListView数据列表 当我使用适配器过滤器时会发生这种情况 过滤器publishResults 方法使用小于原始列表的过滤列表填充数据 当新的过滤列表时似
  • Kotlin 中的单例类

    我想知道如何在 Kotlin 中创建一个单例类 以便我的 Util 类在每次应用程序执行时仅实例化一次 但是 当我将 Java 类转换为 kotlin 时 生成了以下代码 它是否正确 companion object private var
  • Android x86_64 和 x86 模拟器在 AlertDialog.onClick 事件上崩溃

    我正在 x86 64 和 x86 模拟器中测试 Android 应用程序 在从显示列表的 AlertDialog 中选择一个项目后 它崩溃了 Android 模拟器意外关闭 AlertDialog 是从 AppCompatActivity
  • 如果我使用单例,在哪里关闭 SQLiteOpenHelper

    我有以下课程允许用户获得SQLiteOpenHelper object import android content Context public class DBUtils private DBUtils private static D
  • Android、AdMob:AdMob 广告刷新会破坏帧速率

    我正在开发一款游戏 并且进展顺利 不过 我确实对 AdMob 广告刷新有一些疑问 每次刷新广告或绘制广告的不同方面时 我的帧速率都会急剧下降 几乎使游戏无法玩 这是我用于加载广告的内容 ad new AdView this AdSize B
  • 我应该将 onClickListener 放在自定义 ListView 的哪里?

    我正在定制ListView包含 a 的行数CheckBox and a TextView 在我使用自定义之前ListViews使用 SimpleCursorAdapter 我的onListItemClick 工作得很好 我读过我必须添加一个
  • 动画图像视图

    目前我正在开发一款游戏 这是我的游戏的详细信息 用户应选择正确的图像对象 我希望图像从左到右加速 当他们到达终点时 他们应该再次出现在活动中 这是我正在处理的屏幕截图 我有 5 个图像视图 它们应该会加速 您有此类动画的示例代码吗 非常感谢
  • 此版本不符合 Google Play 64 位要求,添加库后仍然出现错误

    我正在 Play 商店上传一个视频编辑器应用程序 其中包含带有一些本机代码的库 所以我通过将其添加到 gradle 来使其兼容 64 位 ndk abiFilters armeabi v7a arm64 v8a x86 x86 64 添加了
  • 自定义 ListView 具有不同的行布局,根据 Web 服务响应进行扩展

    我有列表视图 我有3组观点 图像视图 视频查看 文本视图 我有一个返回图像 视频和文本的网络服务器 因此 根据服务器的响应 我想膨胀列表视图中行的视图 我知道使用自定义适配器来扩展自定义布局 我想知道如何使用自定义适配器来扩充视图类型 例如
  • 如何将txt文件添加到你的android项目中? [复制]

    这个问题在这里已经有答案了 我的Android studio版本是1 5 1 显然这个 never 版本没有 txt 文件的 asset 文件夹 您打算如何将这些文件包含到您的项目中 以及如何进一步使用您内部的应用程序 谢谢你的建议 Pro
  • 使用 firebase 按最新消息对聊天列表进行排序

    我不知道为什么我陷入了一个问题chatList不按最后一条消息时间或最新消息排序 我尝试过存储timestamp在数据库中和订单子依据时间戳 但它仍然不起作用 不起作用意味着列表不会在每条消息后排序 并继续将列表显示为在第一条消息后排序 看
  • Oreo(API 26)-drawOverlay + 在状态栏上绘制

    在android oreo中 我无法使用WindowManager LayoutParams TYPE SYSTEM ERROR不再需要并且必须使用WindowManager LayoutParams TYPE APPLICATION OV
  • 膨胀类片段 InflateException 二进制 XML 文件时出错

    我正在使用 Material Design 和 NavigationDrawer 布局等设计我的第一个应用程序 但我遇到了一个问题 该应用程序非常简单 它只显示文本 并且基于 Android Studio 中提供的模板 尝试启动我的应用程序
  • 无法仅在控制台中启动 androidstudio

    你好 我的问题是下一个 我下载了Android Studio如果我去 路径 android studio bin 我执行studio sh 我收到以下错误 No JDK found Please validate either STUDIO
  • 将 espresso 与自定义 EditText 结合使用

    这是我的布局的一部分
  • 如何从耳机插孔获取电力?

    我的问题是是否有人知道如何创建一个可以通过设备的耳机插孔发送电荷的 Android 应用程序 就像这个视频中那样 该视频展示了一款 iPhone 应用程序 可控制插入耳机插孔的 LED 我想知道如何访问该设备来发送电信号 抱歉我的英语不是我
  • RecyclerView 不调用 onCreateViewHolder 或 onBindView

    没有收到任何错误 所有数据似乎都有效 由于某种原因 没有调用与视图相关的方法 我已确定以下事项 getItemCount 是唯一被调用的适配器方法 并且返回一个正整数值 我知道这将是你们将要查看的区域 构造函数正在被调用 成员变量有效 Pa
  • 首选项和操作栏中的开/关切换按钮 - 冰淇淋三明治风格

    我指的是 ICS 手机上默认 Android 设置应用程序中看到的蓝色开 关样式 也可以在这里看到 http android developers blogspot com 2012 02 android design v2 now wit

随机推荐

  • C++教程

    C 43 43 教程 xff1a 源码 参考网址 xff1a C 43 43 简介 编程宝库 1 include lt iostream gt 2 using namespace std 3 4 int main 5 6 cout lt l
  • Linux命令执行命令自动输入y

    echo y rm i cc root 64 bogon shell touck cc bash touck 未找到命令 root 64 bogon shell touch cc root 64 bogon shell ll cc rw r
  • 查看Oracle数据库版本号

    Oracle 1 select from v version 2 select from product component version 3 set serveroutput on exec dbms output put line d
  • SQL Server2008官方下载地址

    官网地址 xff1a https www microsoft com zh cn download details aspx id 61 30438
  • C#+vs2019windos窗口实现数字图像基础处理(灰度化,二值化,对比度,亮度)

    目录 一 灰度化二 亮度三 对比度四 可变阈值二值化五 自适应二值化 一 灰度化 在三原色理论中 xff0c 所有颜色都是以红 绿 蓝三原色按不同比例混合构成的 xff0c 不同的红 绿 蓝三原色比例构成了不同的颜色 而灰度数字图像指的是图
  • 达梦数据库常见问题总结

    http www itpub net forum php mod 61 viewthread amp tid 61 1557982
  • Linux命令手动清除缓存echo 3 > /proc/sys/vm/drop_caches

    缓存cache占用过大 CPU达到85 以上 释放掉被系统Cache占用的数据命令 xff1a echo 3 gt proc sys vm drop caches 第一行 xff1a 从操作系统 OS 来看 xff1a 计算机共计 4040
  • MIB Browser failed to register OCX components..解决方法

    1 关闭操作系统的防火墙 xff0c 或者在高级选项里添加入站规则 xff0c 允许UDP 162端口消息进入即可 2 以管理员身份运行 bin mgmibbpe exe
  • Navicat For MongoDB安装及破解

    安装包转载网址 xff1a https blog csdn net qq 40737025 article details 82919700 baidu云 请求头自己加上中间有中文就自己去掉 xff0c 防止屏蔽 pan baidu com
  • C# Winform应用程序调用Microsoft RDP client control实现远程连接(VS2013)

    试了好一会 xff0c 终于成功了 xff01 先说问题 xff1a 1 控件已成功添加到工具箱中 但未在活动设计器中启用 注册控件 xff1a regsvr32 C Windows System32 mstscax dll VS2013提
  • C++中枚举enum详解

    转载博客地址 xff1a https blog csdn net bruce 0712 article details 54984371 众所周知 xff0c C C 43 43 语言可以使用 define和const创建符号常量 xff0
  • Android Rust JNI系列教程(一) 环境配置

    序 本系列文章将从rust环境搭建开始 逐步带大家了解使用rust进行Android JNI开发的基本技能 相关文章共分为如下几步 Rust JNI环境搭建 创建第一个Rust JNI项目Rust与Android互相调用Rust 调用And
  • 私人网盘nextcloud配置问题解决

    安装流程 配置流程非常简单 xff0c 主要是参考了下面这篇博文配置 xff0c 在宝塔面板下安装nextcloud xff0c 非常简单 博文跳转 https www vpsss net 5780 html 大概总结以下步骤 xff1a
  • Linux下使用rclone挂载网盘到本地

    Linux下使用rclone挂载网盘到本地 Rclone是一个支持挂载多数国外网盘的工具 Rclone官网传送们 目前Rclone支持挂载的网盘有 xff1a Google Drive Dropbox Google Cloud Storag
  • kvm 虚拟化安装 Ubuntu 18.04 server

    本文续上篇 裸金属服务器 kvm 虚拟化安装 win10 继续记录使用 KVM 在 Centos 7 5 裸金属服务器上安装 Ubuntu 18 04 Server的过程及遇到的问题 资源准备 首先要配置好 KVM 环境 xff0c 上文已
  • 创建回调函数

    1 新建一个空的工程 xff0c 在工程中随便创建一个类 xff0c 比如 h文件 import lt UIKit UIKit h gt typedef void resultBlock void 64 interface MyView U
  • 虚拟机的复制

    虚拟机的复制 xff08 1 xff09 虚拟机复制需要的两个重要文件 etc libvirt qemu xml文件 虚拟机的配置文件 xff0c 前端管理文件 xff0c 可以使用前端文件回到相应位置寻找后端硬盘文件 var lib li
  • 关于C++循环依赖问题的理解

    简介 如果有两个类 xff0c 类A和类B xff0c A类中有一个B类的对象b作为数据成员 xff0c B类中又有一个A类对象a作为数据成员 xff0c 像这样的情况就叫做循环依赖 那么如何解决类之间的循环依赖问题呢 xff1f 代码实例
  • AndroidStudio配置maven阿里云镜像

    写1行不行 xff0c 要写5行 xff0c 不要写 jcenter google xff0c 半天完不了 Android配置maven阿里云镜像 海阔天空185的博客 CSDN博客 android maven 阿里云 buildscrip
  • Android获取设备唯一标识

    一 IMEI xff1a 国际移动设备识别码的缩写 xff0c 其总长为15位 xff0c 每位数字仅使用0 xff5e 9的数字 双卡双待会有两个IMEI值 xff0c 并且在Android10以后就无法获取到了 xff0c 而且在模拟器