如何在 Verizon(CDMA 语音/LTE 数据)设备上获取 IMEI?
How do you get IMEI on a Verizon (CDMA vioice / LTE Data) device?
getDeviceId()
returns Verizon 手机上的 14 位 MEID(因为它是 CDMA 语音设备)。是否有一种编程方式来获取 15 位 IMEI(因为它列在“设置”菜单中)?
免责声明: 解决方案使用未发布的 APIs。这不代表最佳做法,可能会导致意外结果。 API 可能不会实施或可能会更改。使用风险自负。
有一种方法可以通过反射和隐藏的 Android API 调用来实现。 TelephonyManager 有一个 public(但隐藏)方法 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();
}
}
getDeviceId()
returns Verizon 手机上的 14 位 MEID(因为它是 CDMA 语音设备)。是否有一种编程方式来获取 15 位 IMEI(因为它列在“设置”菜单中)?
免责声明: 解决方案使用未发布的 APIs。这不代表最佳做法,可能会导致意外结果。 API 可能不会实施或可能会更改。使用风险自负。
有一种方法可以通过反射和隐藏的 Android API 调用来实现。 TelephonyManager 有一个 public(但隐藏)方法 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();
}
}