获取IMEI设备号的奇怪问题

时间:2012-02-03 19:16:16

标签: android imei

我在android中使用以下代码来获取IMEI电话号码

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

我在很多手机上测试了它

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

完美无缺,并提供IMEI号码

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

Android Pantech

任何人都可以指导我可能出现的问题,或者我是否使用Device_ID来唯一识别Android设备是否适用于所有设备?

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

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

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

  

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

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

答案 2 :(得分:0)

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

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);
}