关于android:获取IMEI设备号的奇怪问题

Strange issue of getting IMEI Number of Device

我在android中使用以下代码来获取手机的IMEI号码

1
2
TelephonyManager telephonyManager = (TelephonyManager)getSystemService(this.TELEPHONY_SERVICE);
        String imei = telephonyManager.getDeviceId().toString();

我在很多手机上测试过它

1)三星Ace(froyo)
2)Galaxy S.
3)Galaxy S2
4)三星Geo(姜面包)

工作完美,并提供IMEI号码

但在以下deivce上运行相同的代码我什么也得不到:(

Android泛泰

任何人指导我可能是什么问题或如果我使用Device_ID唯一识别Android设备将适用于所有设备?

还有一件我在论坛上读过的东西,有些时候是零,很少有着名设备提供相同的Device_ID

任何一个人都明白,什么是唯一识别设备的最佳方式,那段代码应该适用于所有设备?

任何帮助,将不胜感激。


any one put some light on it that what is the best way to uniquely identify device and that piece of code should work on all devices?

不幸的是,没有100%完美的方式来识别Android设备。 这是因为Google没有为此提供可靠的方法。 相反,它建议跟踪应用程序安装(与跟踪设备相比)。 以下是一个很好的讨论:识别应用程序安装。


没有SIM卡的设备没有IMEI号码。
你可以改为读取WIFI-MAC地址(假设每个Android设备都有WIFI)


我创建了一个逻辑,以便在我的想法中获得所有设备的独特价值。
如果它失败了,请看看这个并纠正我。
我在10-20台设备上测试并试图安装相同的ROM我得到了独特的价值,并且在刷新新的rom之后价值相同。
以下是获取唯一值的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static String getDeviceId(Context context) {

    final TelephonyManager tm = (TelephonyManager)     context.getSystemService(Context.TELEPHONY_SERVICE);

    final String tmDevice, tmSerial, androidId;
    tmDevice ="" + tm.getDeviceId();
    tmSerial ="" + tm.getSimSerialNumber();
    androidId =""
            + android.provider.Settings.Secure.getString(context.getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);

    UUID deviceUuid = new UUID(androidId.hashCode(), ((long) tmDevice.hashCode() << 32) | tmSerial.hashCode());
    String deviceId = deviceUuid.toString();
    return deviceId;

/*Below line fails on android 4.4 devices sometime so i made the above lines*/
 // return Secure.getString(activity.getContentResolver(), Secure.ANDROID_ID);
}