靠谱的 Android 唯一设备号生成方案

应用开发中有时候也许会获取设备的唯一标识。Android 设备中获取唯一标识有多种方式,其中最常见的可以获取 IMEI、AndroidId 等方式,但是实际测试当中,有可能会发现其中的某些值获取不到,或者获取到空值。

那么能够怎样去解决呢?

以下是一种比较靠谱的解决方案。通过获取到 IMEI、AndroidId、macAddress 进行拼接,再将拼接结果进行 MD5 转换,那么就可以得到一串 32 个字符的 16 进制数据,这时候也能够保证得到的设备唯一标识为统一的长度。这样也能够很大程度上保证你最终得到的唯一标识不为空,因为这三个值同时为空几乎不大可能。
代码如下:

/**
* 生成设备唯一标识:IMEI、AndroidId、macAddress 三者拼接再 MD5
* @return
*/
public static String generateUniqueDeviceId(){
Context context = MyApplication.getInstance();
String imei = "";
String androidId = "";
String macAddress = "";

TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(TELEPHONY_SERVICE);
if (telephonyManager != null) {
imei = telephonyManager.getDeviceId();
}
ContentResolver contentResolver = context.getContentResolver();
if (contentResolver != null) {
androidId = Settings.Secure.getString(contentResolver, Settings.Secure.ANDROID_ID);
}
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
if (wifiManager != null) {
macAddress = wifiManager.getConnectionInfo().getMacAddress();
}

StringBuilder longIdBuilder = new StringBuilder();
if (imei != null) {
longIdBuilder.append(imei);
}
if (androidId != null) {
longIdBuilder.append(androidId);
}
if (macAddress != null) {
longIdBuilder.append(macAddress);
}
return MD5Utils.toMd5(longIdBuilder.toString());
}
另外

获取 IMEI 需要加入权限 android.permission.READ_PHONE_STATE
获取 macAddress 需要加入权限 android.permission.ACCESS_WIFI_STATE

    原文作者:Android
    原文地址: https://juejin.im/entry/58ef235d0ce463006b96354d
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞