很抱歉碰到一个旧线程,但是这个问题让我很头疼,我找到了一篇好文章供某人阅读,这对我很有帮助。
有时需要在 Android 应用程序开发期间获取基于 Android 的智能手机设备的唯一 ID。当用户想要跟踪应用程序的唯一设备安装时,这是必要的。
这在 Android 开发人员只想将 Push 消息发送到少数特定设备的情况下也很有用。所以这里有必要为每台设备都有一个 UDID。
在 Android 中,设备的 UDID 有许多替代方案。下面列出了一些在android应用程序中获取UDID的方法及其优缺点以及获取设备ID所需的任何权限。
- IMEI:(国际移动设备标识)
- Android ID
- WLAN MAC 地址字符串
- 蓝牙地址字符串
1) IMEI:(国际移动设备标识)
IMEI 号码是获取设备 ID 的非常好的主要来源。它对于每个设备都是唯一的,并且取决于设备硬件。因此,它对于每台设备也是独一无二的,并且在设备的生命周期内是永久性的。
获取设备IMEI的代码sn-p如下,
TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String m_deviceId = TelephonyMgr.getDeviceId();
为此,您的应用程序需要清单文件中提供的“android.permission.READ_PHONE_STATE”权限。
使用 IMEI 作为设备 ID 的优势:
IMEI 对于每台设备都是独一无二的。
即使重新安装了应用程序或者设备已植根或恢复出厂设置,它对于设备仍然是唯一的。
使用 IMEI 作为设备 ID 的缺点:
IMEI 依赖于设备的 Simcard 插槽,因此无法获取不使用 Simcard 的设备的 IMEI。
在双卡设备中,我们为同一设备获得 2 个不同的 IMEI,因为它有 2 个 SIM 卡插槽。
2) Android ID
Android_ID 是一个唯一的 64 位数字,在设备首次启动时生成并存储。当设备恢复出厂设置并生成新设备时,Android_ID 将被清除。
获取Android_ID的代码如下,
String m_androidId = Secure.getString(getContentResolver(), Secure.ANDROID_ID);
使用 Android_ID 作为设备 ID 的优势:
它是所有类型设备(智能手机和平板电脑)的唯一标识符。
无需任何许可。
它将在所有设备中保持唯一性,并且可以在没有 Simcard 插槽的手机上使用。
使用 Android_ID 作为设备 ID 的缺点:
如果用户升级了 Android 操作系统版本,那么这可能会发生变化。
如果设备已植根或在设备上完成出厂重置,则 ID 会更改。
还有一个已知的问题是中国的安卓设备制造商有一些设备具有相同的 Android_ID。
3) WLAN MAC 地址字符串
我们也可以使用 WLAN MAC 地址获取安卓手机的唯一 ID。 MAC 地址对所有设备都是唯一的,适用于所有类型的设备。
获取设备WLAN MAC地址的代码sn-p如下所示,
WifiManager m_wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
String m_wlanMacAdd = m_wm.getConnectionInfo().getMacAddress();
您的应用将需要清单文件中提供的“android.permission.ACCESS_WIFI_STATE”权限。
使用 WLAN MAC 地址作为设备 ID 的优势:
它是所有类型设备(智能手机和平板电脑)的唯一标识符。
如果重新安装应用程序,它仍然是唯一的。
使用WLAN MAC地址作为Device ID的缺点:
如果设备没有wifi硬件那么你会得到空MAC地址,但通常可以看到大多数Android设备都有wifi硬件,市场上几乎没有没有wifi硬件的设备。
4) 蓝牙地址字符串
我们也可以使用蓝牙设备获取安卓手机的唯一 ID。每个具有蓝牙硬件的设备的蓝牙设备地址都是唯一的。
获取蓝牙设备地址的代码sn-p如下,
BluetoothAdapter m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
String m_bluetoothAdd = m_BluetoothAdapter.getAddress();
要获取上述代码,您的应用需要清单文件中提供的“android.permission.BLUETOOTH”权限。
使用蓝牙设备地址作为设备ID的好处:
它是所有类型设备(智能手机和平板电脑)的唯一标识符。
所有设备中通常都有一个蓝牙硬件,并且不会更改。
使用蓝牙设备地址作为设备ID的缺点:
如果设备没有蓝牙硬件,那么你会得到 null。
在我看来,这些是为 Android 智能手机设备获取唯一设备 ID 以及使用它的优缺点的几种最佳方法。现在由您根据 Android 应用程序开发要求来决定使用哪种方法。
如果有任何其他方法可以获取 UDID 并且掩盖了上述方法的缺点,那么我很想在我的 Android 应用程序中探索这些方法。 PL。在评论框中分享这些内容,以及如果有任何建议或疑问。
Here's the article