安卓平板电脑 - 获取唯一设备ID

12

如何从Android平板电脑(Android 3.0 SDK HoneyComb)中获取唯一设备ID?

我还发现我们可以通过使用以下方法获取唯一的Android设备ID:

String deviceId = Settings.System.getString(getContentResolver(),
                                Settings.System.ANDROID_ID);

但是在这里写道,虽然Android ID并不保证是唯一的标识符。

我还查阅了一些SO问题:

  1. Android是否有唯一的设备ID?
  2. 如何查找Android设备的序列号?

并参考了这篇文章:http://android-developers.blogspot.com/2011/03/identifying-app-installations.html

但是我仍然困惑,我们如何从Android平板电脑类型的设备中获取唯一设备ID?

2个回答

21

我知道这个问题很老,但是它可能会误导一些人,因为Android ID没有保证能够正常工作,有些情况下甚至可能为空,或者在Root的手机上被轻易更改。

我的做法是将Android ID与WiFi MAC地址结合起来,生成一个UUID的方法:

private void generateDeviceId() {
    final String macAddr, androidId;

    WifiManager wifiMan = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
    WifiInfo wifiInf = wifiMan.getConnectionInfo();

    macAddr = wifiInf.getMacAddress();
    androidId = "" + android.provider.Settings.Secure.getString(getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);

    UUID deviceUuid = new UUID(androidId.hashCode(), macAddr.hashCode());

    // Maybe save this: deviceUuid.toString()); to the preferences.
}
不要忘记在AndroidManifest中添加权限。
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 

祝你好运!


5

从Android 2.2开始,ANDROID_ID基本上可以保证是唯一的。

最近在Android开发者博客上发布了一篇文章说明了这个问题。


感谢您的支持,我正在开发一款基于3.0 Honeycomb的应用程序,使用ANDROID_ID是否可行? - Paresh Mayani
是的。根据那篇博客,Honeycomb具有独特的ANDROID_ID。 - EboMike
亲爱的,我之前也列出了同样的链接:http://android-developers.blogspot.com/2011/03/identifying-app-installations.html。我已经阅读过了,但是感到有些困惑。所以在这里提出了一个问题。 - Paresh Mayani
@PM:博客文章的关键在于ANDROID_ID从Android 2.2开始产生可靠的唯一数字。我猜你的目标是Honeycomb?那么你很好,Honeycomb包含了2.2的所有功能。 - EboMike
我正在开发一个应用程序,特别是使用HoneyComb版本。感谢您的支持。 - Paresh Mayani
1
实际上,在Android 2.2中存在一个bug,这使得不同的设备可能具有相同的Android ID(有关更多信息,请参见此处)。该漏洞已在Android 2.3中修复。 - Piotr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接