Secure.ANDROID_ID对每个设备都是唯一的吗?

问题描述 投票:61回答:6

我正在使用这个电话:

Secure.getString(getApplicationContext().getContentResolver(), Secure.ANDROID_ID);

获取设备的UID。我想我从多个设备获得相同的ID。这有可能吗?

有问题的ID是:9774d56d682e549c,显然有几个设备返回此ID的问题http://code.google.com/p/android/issues/list?cursor=10603&updated=10603&ts=1295993403

android uuid uniqueidentifier
6个回答
32
投票

检查这个thread,。但是你应该小心,因为它记录为“可以在恢复出厂设置时更改”。使用风险自负,可以在root手机上轻松更改。此外,似乎有些制造商的手机有重复号码thread的问题。根据您的尝试,我可能不会将其用作UID。


22
投票

使用Android O,ANDROID_ID的行为将发生变化。每个用户在手机上的每个应用的ANDROID_ID都不同。

取自:https://android-developers.googleblog.com/2017/04/changes-to-device-identifiers-in.html

Android ID

在O中,Android ID(Settings.Secure.ANDROID_ID或SSAID)对于每个应用和设备上的每个用户具有不同的值。需要设备范围标识符的开发人员应改为使用可重置标识符(例如广告ID),从而为用户提供更多控制权。广告ID还提供面向用户的设置以限制广告跟踪。

另外在Android O中:

  • 只要程序包名称和签名密钥相同,ANDROID_ID值就不会在程序包卸载/重新安装时更改。应用可以依赖此值来维护重新安装状态。
  • 如果在运行早期版本的Android的设备上安装了应用程序,则在将设备更新为Android O时,Android ID将保持不变,除非卸载并重新安装该应用程序。
  • 如果设备出厂重置或者签名密钥在uninstall和之间轮换,则Android ID值仅会更改 重新安装事件。
  • 只有使用Google Play服务和广告ID的设备制造商才需要进行此更改。其他设备制造商可能会提供替代的可重置ID或继续提供ANDROID ID。

14
投票

因此,如果您想要设备本身独有的东西,TM.getDeviceId()就足够了。

以下是显示如何获取Telephony管理员ID的代码。您正在使用的Android设备ID可能会在出厂设置中更改,并且某些制造商在提供唯一ID方面存在问题。

TelephonyManager tm = 
        (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
String androidId = Secure.getString(this.getContentResolver(), Secure.ANDROID_ID);
Log.d("ID", "Android ID: " + androidId);
Log.d("ID", "Device ID : " + tm.getDeviceId());

请务必使用以获取TelephonyManager的权限

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

6
投票

我已经阅读了一些关于此的内容,遗憾的是,不应该依赖ANDROID_ID来唯一地识别单个设备。

它似乎没有在Android合规性要求中强制执行,因此制造商似乎以他们选择的方式实施它,包括一些将其更多地用作“模型”ID等。

此外,请注意,即使制造商已经编写了一个生成器来使其成为UUID(例如),也不能保证在出厂重置后仍然存在。


1
投票

只需在此处列出替代解决方案,即广告ID:

https://support.google.com/googleplay/android-developer/answer/6048248?hl=en

复制自上面的链接:

广告ID是由Google Play服务提供的用于广告的唯一用户可重置ID。它为用户提供了更好的控制,并为开发人员提供了一个简单的标准系统,可以继续通过他们的应用获利。它使用户能够重置其标识符或退出Google Play应用中的个性化广告(以前称为基于兴趣的广告)。

限制是:

  1. 仅适用于Google Play的设备。
  2. 隐私政策:https://support.google.com/googleplay/android-developer/answer/113469?hl=en&rd=1#privacy

0
投票
//Fields
String myID;
int myversion = 0;


myversion = Integer.valueOf(android.os.Build.VERSION.SDK);
if (myversion < 23) {
        TelephonyManager mngr = (TelephonyManager) 
getSystemService(Context.TELEPHONY_SERVICE);
        myID= mngr.getDeviceId();
    }
    else
    {
        myID = 
Settings.Secure.getString(getApplicationContext().getContentResolver(), 
Settings.Secure.ANDROID_ID);
    }

是的,Secure.ANDROID_ID对于每个设备都是唯一的。

© www.soinside.com 2019 - 2024. All rights reserved.