如何在android java中获取设备唯一ID?作为2020年的谷歌法律

如何在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似乎是唯一设备

我已经阅读了文档,我知道IMEI、Android ID、安全ID等现在有一个限制。然后,我使用UUID在我的应用程序中作为唯一ID使用,但问题是,当存储或数据被清除时,存储在SharedReference中的UUID也被删除,并获得不同的UUID。
请帮助我并建议我获取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%可靠,但优于其他解决方案。