2

getDeviceId()返回 Verizon 手机上的 14 位 MEID(因为它是 CDMA 语音设备)。是否有一种编程方式来获取 15 位 IMEI(如“设置”菜单中列出的那样)?

4

1 回答 1

2

免责声明: 解决方案使用未发布的 API。这并不代表最佳实践,可能会导致意外结果。API 可能未实现或可能更改。使用风险自负。

有一种方法可以通过反射和隐藏的 Android API 调用来做到这一点。TelephonyManager 有一个公共(但隐藏的)方法 getImei()。不理想,但以下适用于我的特殊需要。

private String getIMEI() throws NoIMEIException {
    TelephonyManager mTelephonyMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
    try {
        Method method = mTelephonyMgr.getClass().getMethod("getImei");
        String imei = (String) method.invoke(mTelephonyMgr);
        if (imei == null) {
            throw new NoIMEIException();
        } else {
            return imei;
        }
    } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
        throw new NoIMEIException();
    }
}
于 2015-03-04T14:04:57.597 回答