如何在 Android 10 中获取有关手机 IMEI 的信息?
Posted
技术标签:
【中文标题】如何在 Android 10 中获取有关手机 IMEI 的信息?【英文标题】:How do I get information about a phone's IMEI in Android 10? 【发布时间】:2020-01-30 12:02:33 【问题描述】:在 android 10 之前,我使用 TelephonyManager
API 来检索该信息,但它不再适用于 Android 10。
【问题讨论】:
I am getting IMEI null in Android Q?的可能重复 不再允许,因为 IMEI 是设备特定标识符,可用于向用户暴露各种隐私问题。你能告诉我们为什么你需要 IMEI,也许有推荐的替代品吗?有关该主题的参考,您可以查看developer.android.com/training/articles/user-data-ids Phony 加 1 :) IMEI 在 Android 10 中不再可访问,因为从 Google Play 商店安装的第三方应用程序无法声明特权权限。根据官方文档developer.android.com/about/versions/10/privacy/changes 【参考方案1】:来自Android Developers Documentation Website
从 Android 10 开始,应用必须拥有
READ_PRIVILEGED_PHONE_STATE
特权权限才能访问设备的不可重置标识符,包括 IMEI 和序列号。从 Google Play 商店安装的第三方应用无法声明特权。
如果您的应用没有权限并且您尝试询问有关不可重置标识符的信息,平台的响应会因目标 SDK 版本而异:
如果您的应用面向 Android 10 或更高版本,则会发生 SecurityException。 如果您的应用面向 Android 9(API 级别 28)或更低版本,如果应用具有READ_PHONE_STATE
权限,该方法将返回 null 或占位符数据。否则,会发生 SecurityException。如果您尝试访问它,它会引发以下异常:
java.lang.SecurityException: getImeiForSlot: The user 10180 does not meet the requirements to access device identifiers.
【讨论】:
请考虑引用您复制和粘贴答案的位置。 (好像是从这里逐字复制粘贴的:developer.android.com/about/versions/10/privacy/…) 由于链接易断,最好以书面形式发布答案。【参考方案2】:我也面临同样的问题,但就我而言,我有一种返回 UUID 的“备份”代码。 这是您可以使用的代码:
String uniqueID = UUID.randomUUID().toString();
如果您想要“安装唯一标识符”,此代码很有用,但它不能用作设备唯一标识符,因为如果用户卸载并重新安装您的应用程序,返回的 UUID 将与上一个不同。
在我的例子中,我使用 UUID.nameUUIDFromBytes 通过给定的“名称”生成 UUID,并且我使用 Settings.Secure.ANDROID_ID 作为 UUID 的“名称”。使用此方法,您“授予”返回的 UUID 将是相同的,除非用户进行出厂重置。
代码如下:
String androidId = Settings.Secure.getString(context.getContentResolver(),
Settings.Secure.ANDROID_ID);
UUID androidId_UUID = UUID
.nameUUIDFromBytes(androidId.getBytes("utf8"));
String unique_id = androidId_UUID.toString();
到目前为止,一切正常,但问题是:自 Android 10 发布以来,Google 不建议使用任何类型的“硬件标识符”,其中包括 Settings.Secure.ANDROID_ID。这实际上是我关心的问题,因为在我工作的公司中,我们使用 IMEI 或此 UUID 来识别我们的客户用户并定义用户是否尝试登录多个设备,这是我们的规则所不允许的,并建立一些静力学。如果同一设备的 UUID 不是唯一的,我们将不得不审查我们所有的用户访问控制。
这里是关于唯一标识符良好实践的 Android 开发者链接。 https://developer.android.com/training/articles/user-data-ids
这里是同一个链接,但有一个锚点,其中谷歌描述了一些用例和每个用例的唯一标识符的最佳选择。 https://developer.android.com/training/articles/user-data-ids#common-use-cases
没有一个用例适合我,所以我仍在寻找更好的解决方案。
我希望这可以帮助某人。
【讨论】:
以上是关于如何在 Android 10 中获取有关手机 IMEI 的信息?的主要内容,如果未能解决你的问题,请参考以下文章
在 xmpp for android 中获取生日、性别、手机