在Android 10中,我如何获取手机IMEI信息?

6

在 Android 10 之前,我使用 TelephonyManager API 来获取这些信息,但在 Android 10 中不再适用。


1
可能是重复的问题:我在Android Q中获取IMEI为空? - Aditya Bhawsar
1
由于IMEI是一种设备特定的标识符,可能会导致用户面临各种隐私问题,因此不再允许使用。您能告诉我们为什么需要IMEI,或者是否有推荐的替代方案?有关此主题的参考,请查看https://developer.android.com/training/articles/user-data-ids。 - Ryujin
为 Phony 加 1 :) - Crispert
因官方文档(https://developer.android.com/about/versions/10/privacy/changes)所述,Android 10 中无法再访问IMEI,因为从 Google Play 商店安装的第三方应用程序无法声明特权权限。 - Attif
2个回答

6
我面临相同的问题,但是在我的情况下,我有一种“备份”代码,可以返回一个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

这是相同的链接,但带有一个锚点,其中Google描述了一些用例和每个用例的最佳唯一标识符选项。 https://developer.android.com/training/articles/user-data-ids#common-use-cases

没有一个用例适合我,所以我仍在寻找更好的解决方案。

我希望这能帮助某些人。


5
Android 开发者文档网站 开始,
自 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: 用户 10180 不满足访问设备标识符的要求。

1
请考虑引用您复制和粘贴答案的来源。(它似乎是从这里逐字逐句地复制和粘贴的:https://developer.android.com/about/versions/10/privacy/changes#non-resettable-device-ids) - Edric
由于链接可能会失效,最好以书面形式发布答案。 - Kaushik Burkule

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接