我正在使用这个电话:
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 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中:
因此,如果您想要设备本身独有的东西,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" />
我已经阅读了一些关于此的内容,遗憾的是,不应该依赖ANDROID_ID来唯一地识别单个设备。
它似乎没有在Android合规性要求中强制执行,因此制造商似乎以他们选择的方式实施它,包括一些将其更多地用作“模型”ID等。
此外,请注意,即使制造商已经编写了一个生成器来使其成为UUID(例如),也不能保证在出厂重置后仍然存在。
只需在此处列出替代解决方案,即广告ID:
https://support.google.com/googleplay/android-developer/answer/6048248?hl=en
复制自上面的链接:
广告ID是由Google Play服务提供的用于广告的唯一用户可重置ID。它为用户提供了更好的控制,并为开发人员提供了一个简单的标准系统,可以继续通过他们的应用获利。它使用户能够重置其标识符或退出Google Play应用中的个性化广告(以前称为基于兴趣的广告)。
限制是:
https://support.google.com/googleplay/android-developer/answer/113469?hl=en&rd=1#privacy
//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对于每个设备都是唯一的。