Android 唯一序列号

2024-03-06

我正在开发一个针对 Android 4.0 (API 14) 及更高版本的 Android 应用程序。

我正在寻找每个设备唯一且永久存在的序列号(随设备一起死亡,恢复出厂设置后不会更改)。

我在网上找到了很多关于 Android 设备唯一标识符的结果,但在android.os.Build.SERIAL number.

到目前为止,我消除了使用ANDROID_ID因为恢复出厂设置后可能会发生变化。我还消除了使用IMEI因为 Android 设备可能不是电话。我无法使用 wifi 或蓝牙MAC地址因为设备可能没有这样的硬件和/或如果未启用硬件,这样的 MAC 地址可能无法读取(基于我在网上找到的内容)。

我相信我可能会寻找 Android 设备序列号。

使用它可以轻松访问android.os.Build.SERIAL(因为它是在 API 级别 9 中添加的,不需要任何额外的权限)。

我的问题是:

  • 考虑到我的应用程序面向 Android 4.0 (API 14) 及更高版本,是android.os.Build.SERIAL每个设备的 Android 设备编号是唯一的吗?

  • 目前,文档android.os.Build.SERIAL表示:硬件序列号(如果有)。仅字母数字,不区分大小写。这是否意味着序列号可能不可用?

  • 满足上述条件的另一种选择是什么?


考虑到我的应用程序面向 Android 4.0 (API 14) 及更高版本,每个设备的 Android 设备的 android.os.Build.SERIAL 编号是否唯一?

根据这个有用article https://android-developers.blogspot.com/2011/03/identifying-app-installations.html在 Android 开发者博客中,android.os.Build.SERIAL should如果可用,则应是唯一的。 来自文章:

没有电话功能的设备需要在此处报告唯一的设备 ID;有些手机也可能这样做。

这是否意味着序列号可能不可用?

正确,它可能不可用。请注意他们说“需要没有电话功能的设备......”,因此只有没有“电话”功能的设备(例如仅支持 wifi 的平板电脑)才需要提供SERIAL数字,尽管有些手机仍然这样做(例如 Nexus 4)。

关于这个主题肯定缺乏文档,但从措辞来看,可能只有“没有电话功能的设备”才需要提交唯一 ID,而提交唯一 ID 的手机可能不是唯一的。

满足上述条件的另一种选择是什么?

对于你的情况,我认为你最好的选择是首先检查deviceId(IMEI,或其他什么)如果deviceId不存在然后你回退到使用android.os.Build.SERIAL(因为这可能是平板电脑)就像这样:

public static String getDeviceId(Context context) {
    final String deviceId = ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId();
    if (deviceId != null) {
        return deviceId;
    } else {
        return android.os.Build.SERIAL;
    }
}

请记住使用deviceId你需要许可android.permission.READ_PHONE_STATE.

So由于您的应用程序的 minSDK 为 14,因此您可以安全地使用该字段android.os.Build.SERIAL。如果我们假设没有电话功能的设备确实总是提供唯一的 IDSERIAL那么我认为这对于始终获得唯一的设备 ID 来说是一个安全的选择(当然,排除任何错误)。

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

Android 唯一序列号 的相关文章

  • 确定是否在已取得 root 权限的设备上运行

    我的应用程序具有某些功能 该功能只能在具有 root 权限的设备上运行 与其让此功能在使用时失败 然后向用户显示适当的错误消息 我更喜欢能够先默默地检查 root 是否可用 如果不可用 则首先隐藏相应的选项 有没有办法做到这一点 这是一个类
  • Android,语言文件不起作用

    我现在正在创建一个 Android 应用程序 并尝试为我的母语添加语言文件 但在某种程度上 这对我不起作用 我尝试在两部不同的手机中加载该应用程序 但结果相同 之前创建过语言文件 效果良好 但这次不行 手机设置为瑞典语 语言文件适用于我创建
  • 将寻呼机视为列表视图行项目

    我有一个包含 20 行的列表视图 我想为列表视图中的每一行设置一个视图寻呼机 由于列表视图的行中的项目可能是一个或多个 并且我想使用视图分页器显示列表视图行项目 为此 我使用以下代码 将显示在列表视图行中的自定义布局 作为分页器项目
  • Twitter 集成期间获取访问令牌函数行为不当

    我只是想使用 twitter4j 从我的 Android 应用程序向 Twitter 分享文本 首先 我尝试的是我创建了一个新项目 并且这个特定的代码运行成功 然后我在我的应用程序中混合了该特定代码 登录 Twitter 成功完成 之后我发
  • 将 ArrayList 保存在捆绑包 savingInstanceState 中

    ArrayList 是在类级别定义的 这些是我保存的实例方法 Override protected void onSaveInstanceState Bundle outState super onSaveInstanceState out
  • 如何在不改变的情况下将字符串转换为字节?

    我需要一个解决方案将字符串转换为字节数组而不需要像这样进行更改 Input String s Test Output String s Test byte b Test 当我使用 s getBytes 那么回复是 B 428b76b8 但我
  • MAT(Eclipse 内存分析器)- 如何从内存转储中查看位图

    I m analyzing memory usage of my Android app with help of Eclipse Memory Analyzer http www eclipse org mat also known as
  • 如何使用 onSearchRequested() 调用搜索对话框

    我正在尝试实现搜索对话框 但无法显示活动中的搜索 我在清单文件中定义了主要活动 此活动向用户显示了他们必须从中选择的选项列表 选项之一是 搜索 选项
  • Android框架结构与MFC/Win32结构的比较?

    我为 Android 和 Windows 进行开发 使用 MFC 有时使用 win32 昨天我随意比较了这两个框架 它们显然非常非常不同 因此 Windows 开发与 Android 开发有很大不同 我想知道人们认为 Android 这样的
  • UnsupportedOperationException:特权进程中不允许使用 WebView

    我在用android sharedUserId android uid system 在我的清单中获得一些不可避免的权利 从 HDMI 输入读取安卓盒子 http eweat manufacturer globalsources com s
  • EditText 的高度不会扩展到其父级的高度

    我在滚动视图中放置了编辑文本 高度 match parent并期望它的高度等于滚动视图 但事实并非如此 它的高度就像wrap content这意味着如果 EditText 中没有文本 我必须将光标指向要弹出的软键盘的第一 行 我想要的是我可
  • 找不到资源矢量绘图的异常

    我将在某些设备上运行我的应用程序 其崩溃日志如下 01 04 16 54 02 206 7466 7466 com lawnmowers E AndroidRuntime FATAL EXCEPTION main Process com l
  • onTouch 给出奇怪的触摸点 Android

    我正在做的事情非常简单 我以前做过 但现在它没有按我的预期运行 无论如何 让我简要解释一下我正在尝试做什么以及我得到了什么 设想 我有一个RelativeLayout其中一个ImageView已放置 现在我设置touchlistener像这
  • 在 TextView onTextChanged 上设置文本

    我有一个定义为类属性的文本视图 以便我可以在整个类中访问它 在 onCreate 方法中我执行以下操作 chars TextView findViewById R id chars chars setText 300 之后 public v
  • Exif 方向标签返回 0

    我正在开发一个自定义相机应用程序 我面临以下问题 当我尝试使用检索方向时ExifInterface 它总是返回 0 ORIENTATION UNDEFINED 这使我无法将图像旋转到正确的状态 从而无法正确显示 我使用示例代码来设置相机旋转
  • 在android中的日期选择器对话框中显示当前日期

    我多次尝试在日期选择器对话框中显示当前日期 但失败了 它显示 1 1 1990 我已经遵循了堆栈溢出的一些答案 但不幸的是这些对我不起作用 谁能解释一下在日期选择器对话框中显示当前日期的代码 谢谢 It may help you publi
  • Admob - 没有广告可显示

    你好 我尝试制作一些在 Android 手机上显示广告的示例程序 并尝试在 v2 2 的模拟器上测试它 代码中的一切似乎都很好 但调试器中的 AdListener 表示 响应消息为零或空 onFailedToReceiveAd 没有广告可显
  • RecyclerView元素更新+异步网络调用

    我有一个按预期工作的回收视图 我的布局中有一个按钮可以填充列表 该按钮应该进行异步调用 根据结果 我更改按钮的外观 这一切都发生得很好 但是 当我单击按钮并快速向下滚动列表时 异步调用的结果会更新新视图的按钮 代替旧视图的视图 我该如何处理
  • 将数据放入短信发送意图中?

    我想发送短信 如果文字太长 我会将其分成多条消息 我试图将一些额外的信息放入 已发送 意图中 以了解哪个部分已发送 以及所有部分何时完成 ArrayList
  • Android 中带有无尽列表视图滚动的 AsyncTask

    我正在创建一个应用程序 其中我需要有无限的滚动列表视图 我不想在我的应用程序中使用任何库 我在网上看到了一些有助于实现此类列表视图的示例 但我的疑问是 当我的数据来自服务器并在异步任务中进行解析时 如何才能拥有无尽的列表视图 如何从滚动异步

随机推荐

  • Ruby:将变量合并到字符串中

    我正在寻找一种更好的方法 在 Ruby 中将变量合并到字符串中 例如 如果字符串类似于 The animal action the second animal 我有变量animal action and second animal 将这些变
  • Tensorflow 基本示例错误:CUBLAS_STATUS_NOT_INITIALIZED

    您好 我正在尝试安装并运行tensorflow 1 0 我正在使用以下指南https www tensorflow org get started mnist beginners https www tensorflow org get s
  • 缺少“访问控制允许来源”。我的下一步应该是什么?

    我想从这里提取收益率曲线数据 下面的 get 请求返回 200 正常 状态代码 但也显示一条控制台注释 指出跨域请求被阻止 因为缺少 CORS 标头 Access Control Allow Origin get http www trea
  • 如何从 PHP 中的 json_decode 访问嵌套数组?

    我花了几个小时在这上面 并且在 stackoverflow 上阅读了很多答案 但没有一个有帮助 到目前为止我所能做的就是打印集市广场 克利夫登对于这个例子 obj json decode data obj obj 0 print obj g
  • 如何使用 python 的 PIL 以一定角度绘制文本?

    使用 Python 我希望能够使用 PIL 以不同角度绘制文本 例如 假设您正在钟面周围绘制数字 号码3会按预期出现 而12我们将逆时针旋转 90 度来绘制 因此 我需要能够从许多不同的角度绘制许多不同的弦 将文本绘制到临时空白图像中 旋转
  • 不同进程的内存地址相同

    我只是不明白为什么这段代码会这样工作 而不是我期望的 include
  • LINQ 与 FoxPro?

    有没有合理的方法使用 LINQ 访问 FoxPro 数据库 我刚刚完成实施工作 http linqtovfp codeplex com http linqtovfp codeplex com
  • Android:事件 ACTION_POWER_CONNECTED 未发送到我的 BroadcastReceiver

    我想在手机插入充电器后做一些事情 所以我 已创建ChargingOnReciever public class ChargingOnReceiver extends BroadcastReceiver public void onRecei
  • Flash 消息无法正常工作express/nodejs/ejs

    闪存消息似乎不起作用 我想我错过了一些非常明显的东西 但我已经研究了一个小时 但我仍然不知道为什么它不起作用 我的中间件 Session middleware app use session secret stuffedbagels res
  • 通过嵌套 tf.map_fn 反向传播梯度

    我想在每个向量上映射一个 TensorFlow 函数 该向量对应于具有维度的矩阵中每个像素的深度通道 批量大小 H W n 通道 换句话说 对于每个尺寸的图像H x W我在批次中拥有 我提取一些特征图F k 其数量为n channels 具
  • 无法在主线程上启动处理程序

    我正在开发 jar api 以从 Unity3D 读取 Google Fit 数据 我现在面临的问题是 当我想执行这段代码时 private void buildFitnessClient mClient new GoogleApiClie
  • 强制用户在首次使用 Devise 登录时重置密码

    预计到达时间最后更新为我当前的解决方案 我希望能够为高价值用户手动创建帐户 这意味着我们必须为他们生成密码并让他们在首次登录时更改密码 我找到了执行此操作的解决方案here https stackoverflow com questions
  • Cython setup.py 找不到已安装的 Visual C++ 构建工具

    我正在尝试使用此 setup py 文件构建我的 cython 代码 from distutils core import setup from Cython Build import cythonize import numpy as n
  • C# Linq 在嵌套数组对象中查找特定项

    我正在使用 asp net core webapi 和 azure cosmosdb 开发一个应用程序 我需要从对象列表中找到一个项目 我对 linq 没有经验 在下面的 json 中 我需要找到一个拥有 learnerId 123 的扇区
  • php xpath 与 text() 和 SimpleXMLElement->xpath 不符合 xpath 预期结果

    我正在尝试获取 td span 的所有文本节点 我正在尝试使用 xpath td span text 问题是它返回每个文本元素的所有文本节点 这里有两个 193 和 120 它返回 193120 两次 而不是单独元素中的 193 和 120
  • 获取 numpy 稀疏矩阵行的范数

    我有一个通过使用 Sklearn 的 TfidfVectorizer 对象获得的稀疏矩阵 vect TfidfVectorizer sublinear tf True max df 0 5 analyzer word vocabulary
  • 如何有效地编码/解码压缩的位置描述?

    我正在为日本象棋变体编写一个表库 为了索引表基数 我将每个国际象棋位置编码为整数 在编码步骤之一中 我对棋盘上棋子的位置进行编码 由于实际方法有点复杂 我就简单地解释一下这个问题 编码 在残局桌面中 我有 比方说 六个不同的棋子 我想将它们
  • 可空类型装箱/拆箱 - 为什么要这样实现?

    通过 C 从 CLR 中提取有关装箱 拆箱值类型的信息 关于装箱 如果可空实例不是null CLR 从可为 null 的实例中取出值并将其装箱 换句话说可空 值为5被装箱成盒装 Int32值为 5 关于拆箱 拆箱只是获取对装箱对象的拆箱部分
  • 关闭 Matplotlib 数据[重复]

    这个问题在这里已经有答案了 我正在使用 Matplotlib 和 MPLD3 创建可以在 html 页面中显示的图形 使用 django 目前 我的图表是根据从 csv 文件中提取的数据动态生成的 我经常在终端中收到此消息 运行时警告 已打
  • Android 唯一序列号

    我正在开发一个针对 Android 4 0 API 14 及更高版本的 Android 应用程序 我正在寻找每个设备唯一且永久存在的序列号 随设备一起死亡 恢复出厂设置后不会更改 我在网上找到了很多关于 Android 设备唯一标识符的结果