![]() |
1
102
GetSystemService是Activity类中的一个方法。getdeviceid()将根据手机使用的无线电(GSM或CDMA)返回设备的MDN或MEID。 每个设备必须在此处返回一个唯一的值(假设它是一个电话)。这应该适用于任何带有SIM卡插槽或CDMA无线电的Android设备。你自己用的是Android驱动的微波炉;-) |
![]() |
2
71
正如戴夫·韦伯所说, Android Developer Blog has an article 包括这个。 我和谷歌的某个人谈过,想得到一些关于一些项目的补充说明。以下是我在上述博客帖子中没有提到的内容:
根据Google的建议,我实现了一个类,它将为每个设备生成一个唯一的UUID,在适当的情况下使用android作为种子,必要时返回telephonyManager.getdeviceID(),如果失败,则使用随机生成的唯一UUID,该UUID在应用程序重新启动(但不是应用程序重新安装)期间保持不变。
|
![]() |
3
32
此代码使用隐藏的Android API返回设备序列号。 |
![]() |
4
16
但是,不能保证Android ID是唯一的标识符。 |
![]() |
5
14
有 an excellent post on the Android Developer's Blog discussing this .
它建议不要使用
相反,您可以使用以下方法之一:
这篇文章讨论了每种方法的优缺点,值得一读,这样你就可以找出最适合你使用的方法。 |
![]() |
6
12
对于设备独有且在其使用寿命内保持不变的简单数字(除非工厂重置或黑客攻击),请使用 Settings.Secure.ANDROID_ID .
要使用设备序列号(在“系统设置/关于/状态”中显示的序列号),如果可用,请返回Android ID:
|
![]() |
7
7
IMEI很好,但只适用于带手机的Android设备。您还应该考虑支持平板电脑或其他没有手机的Android设备。 您有一些选择,比如:构建类成员、bt-mac、wlan-mac,甚至更好——所有这些的组合。 我在我的博客上的一篇文章中解释了这些细节,请参阅: http://www.pocketmagic.net/?p=1662 |
![]() |
8
6
自从 这里没有答案提到一个完美的、防故障的ID,它通过系统更新持久存在于所有设备中。 (主要是因为谷歌没有一个单独的解决方案),我决定发布一个方法,通过组合两个可用的标识符,并在运行时在它们之间进行选择,这是下一个最好的方法。 在代码之前,有3个事实:
注:事实(1)和(2)是 based on Google statements 解决方案 根据以上事实,通过检查是否有IMEI绑定的硬件,可以始终拥有唯一的标识符,如果没有,则返回到串行,因为无法检查现有的串行是否有效。下面的静态类提供了两种方法来检查这种存在,并使用IMEI或串行:
我会建议使用
附笔。 :请注意,原始设备制造商 设法阻止了针对谷歌政策的系列报道 (多台设备具有相同的序列号)和谷歌(如前所述),在一个大的原始设备制造商中至少有一个已知的案例(我猜三星也不知道它是哪个品牌)。 免责声明 :这回答了获取唯一设备ID的原始问题,但OP通过声明他需要应用程序的唯一ID来引入歧义。即使在这样的情况下,Android的ID会更好,但在通过安装两个不同的ROM(甚至可以是同一个ROM)对应用程序进行钛备份之后,它也不会工作。我的解决方案保持了独立于闪存或工厂重置的持久性,并且只有当IMEI或串行篡改通过黑客/硬件模块发生时才会失败。 |
![]() |
9
5
上述所有方法都存在问题。在Google I/O上,Reto Meier发布了一个强大的解决方案,它可以满足大多数开发人员跟踪用户安装的需求。 这种方法将为您提供一个匿名的、安全的用户ID,该ID将在不同的设备(包括基于主Google帐户的平板电脑)和同一设备上的不同安装过程中对用户保持不变。基本方法是生成一个随机的用户ID,并将其存储在应用程序共享首选项中。然后使用Google的备份代理将链接到Google帐户的共享首选项存储在云中。 让我们来看看完整的方法。首先,我们需要使用Android备份服务为共享的引用创建备份。首先通过此链接注册应用程序: http://developer.android.com/google/backup/signup.html 谷歌会给你一个备份服务密钥,你需要添加到清单中。您还需要告诉应用程序使用backupagent,如下所示:
然后,您需要创建备份代理并告诉它使用用于共享引用的助手代理:
要完成备份,您需要在主活动中创建backupManager的实例:
最后,如果用户ID尚不存在,请创建它,并将其存储在sharedreferences中:
即使用户切换设备,此用户ID现在也将在安装过程中保持不变。 有关此方法的更多信息,请参阅此处的reto's talk http://www.google.com/events/io/2011/sessions/android-protips-advanced-topics-for-expert-android-app-developers.html 有关如何实现备份代理的完整详细信息,请参阅以下开发人员网站: http://developer.android.com/guide/topics/data/backup.html 我特别推荐下面关于测试的部分,因为备份不会立即发生,所以为了测试,您必须强制执行备份。 |
![]() |
10
2
另一种方法是在没有任何权限的应用程序中使用/sys/class/android_b/android0/iserial。
要在Java中实现这一点,可以使用FieldPixStand打开ISLID文件并读出字符。请确保将其包装在异常处理程序中,因为并非所有设备都有此文件。 已知至少以下设备具有此文件世界可读性:
你也可以在这里看到我的博客帖子: http://insitusec.blogspot.com/2013/01/leaking-android-hardware-serial-number.html 在这里我将讨论哪些其他文件可供参考。 |
![]() |
11
1
正如@haserman所说:
但必须在清单文件中包含权限:
|
![]() |
12
1
作为字符串的Android OS设备的唯一设备ID。
但我极力推荐谷歌建议的这种方法: |
![]() |
13
1
根据设备的制造商和安卓版本,有几种方法可以获得这个数字,因此我决定编译在一个单一的解决方案中找到的所有可能的解决方案。 gist . 下面是它的简化版本:
|
![]() |
14
0
我知道这个问题由来已久,但可以用一行代码来解决
|
![]() |
15
-1
我发现上面@emmby发布的示例类是一个很好的起点。但它有一些缺陷,正如其他海报所提到的。主要的一点是,它不必要地将UUID保存到XML文件中,然后总是从此文件中检索UUID。这使得类向一个简单的黑客开放:任何拥有根电话的人都可以编辑XML文件,为自己提供一个新的UUID。 我已经更新了代码,使其仅在绝对必要时(即使用随机生成的UUID时)保持为XML,并根据@brill pappin的答案重新考虑逻辑:
|
![]() |
16
-2
对。它是一个设备硬件序列号,并且是唯一的。因此,在API 2.3及以上级别,您可以使用 android.os.build.android_id版 得到它。对于低于2.3 API等级的应用 TelephoneManager.GetDeviceId()。 . 你可以读这个 http://android-developers.blogspot.in/2011/03/identifying-app-installations.html |
![]() |
Murilo · Jetpack编写导航栏项目图标 4 月前 |
![]() |
KolaYAndr · 活动RESULT_OK似乎从未发生过 5 月前 |
![]() |
psycho_pat · Android应用程序中的权限 5 月前 |
|
FarazFiroz · 如何将argb转换为描述性文本颜色 6 月前 |
![]() |
Daniel · Unity Android游戏支持的设备数量太少 6 月前 |