如何在android java中获取设备唯一ID?作为2020年的谷歌法律
我已经阅读了文档,我知道IMEI、Android ID、安全ID等现在有一个限制。然后,我使用UUID在我的应用程序中作为唯一ID使用,但问题是,当存储或数据被清除时,存储在SharedReference中的UUID也被删除,并获得不同的UUID。如何在android java中获取设备唯一ID?作为2020年的谷歌法律,java,android,Java,Android,我已经阅读了文档,我知道IMEI、Android ID、安全ID等现在有一个限制。然后,我使用UUID在我的应用程序中作为唯一ID使用,但问题是,当存储或数据被清除时,存储在SharedReference中的UUID也被删除,并获得不同的UUID。 请帮助我并建议我获取android唯一设备ID。在设备首次启动时,会生成并存储一个随机值。此值可通过Settings.Secure.ANDROID\u ID获得。它是一个64位的数字,在设备的生命周期内应该保持不变。ANDROID_ID似乎是唯一设备
请帮助我并建议我获取android唯一设备ID。在设备首次启动时,会生成并存储一个随机值。此值可通过Settings.Secure.ANDROID\u ID获得。它是一个64位的数字,在设备的生命周期内应该保持不变。ANDROID_ID似乎是唯一设备标识符的好选择,因为它适用于智能手机和平板电脑。要检索该值,可以使用以下命令
import android.provider.Settings.Secure;
private String android_id = Secure.getString(getContext().getContentResolver(),Secure.ANDROID_ID);
//Secure ID V 10
val secureId = Secure.getString(getContentResolver(), Secure.ANDROID_ID)
//UUID
private static String uniqueID = null;
private static final String PREF_UNIQUE_ID = "PREF_UNIQUE_ID";public synchronized static String id(Context context) {
if (uniqueID == null) {
SharedPreferences sharedPrefs = context.getSharedPreferences(
PREF_UNIQUE_ID, Context.MODE_PRIVATE);
uniqueID = sharedPrefs.getString(PREF_UNIQUE_ID, null);
if (uniqueID == null) {
uniqueID = UUID.randomUUID().toString();
Editor editor = sharedPrefs.edit();
editor.putString(PREF_UNIQUE_ID, uniqueID);
editor.commit();
}
}
return uniqueID;
}
谢谢你的评论。你能告诉我这在android版本>10中也有效吗?这不是一个有效的“设备唯一ID”,而是一个“工厂重置唯一ID”,事实上,“Secure.android_ID”在工厂重置后重置(或手动使用使用根权限的应用程序)。只有使用根权限,才能获取某种设备信息,这些信息可以用作真正的唯一数据。您还可以尝试从具有Wi-Fi或蓝牙硬件的设备获取MAC地址。但是,不建议使用此解决方案,因为并非所有设备都具有Wi-Fi连接。即使用户有Wi-Fi连接,也必须打开该连接才能检索数据。否则,调用不会报告MAC地址。由于大多数应用程序的要求是识别特定安装,而不是物理设备,因此,如果要使用UUID类,为用户获取唯一id是一个很好的解决方案。谷歌的Reto Meier在谷歌I/O演示文稿中介绍了以下解决方案在Android上识别特定设备并非易事。有很多很好的理由可以避免这种情况。最好的解决方案可能是通过使用UUID解决方案来识别特定的安装。但是,如果您想绝对地在物理上识别特定的设备,您可以尝试使用ANDROID_ID解决方案。不是100%可靠,但优于其他解决方案。