我正在使用下面的代码来获取 Android 设备的 IMEI,
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
IMEI = tm.getDeviceId();
对于具有单个 sim 激活的设备来说很好。如果我们对有两张 sim 卡的设备应用相同的代码,那么我如何获得DeviceID
并判断我是否获得了 SIM1 Id 或 SIM2 Id?
我正在使用下面的代码来获取 Android 设备的 IMEI,
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
IMEI = tm.getDeviceId();
对于具有单个 sim 激活的设备来说很好。如果我们对有两张 sim 卡的设备应用相同的代码,那么我如何获得DeviceID
并判断我是否获得了 SIM1 Id 或 SIM2 Id?
IMEI 号码应该与手机相关联,而不是与 SIM 卡相关联,因此在双卡设备中,您也应该只有一个 IMEI 号码。
“IMEI 仅用于识别设备” [...] “相反,通过传输存储在 SIM 卡上的 IMSI 号码来识别订户” - 参考:维基百科
编辑:
查看源码,或许能找到一些提示:Source of Settings app
这是“IMEI”部分的片段:
// NOTE "imei" is the "Device ID" since it represents
// the IMEI in GSM and the MEID in CDMA
if (mPhone.getPhoneName().equals("CDMA")) {
setSummaryText(KEY_MEID_NUMBER, mPhone.getMeid());
setSummaryText(KEY_MIN_NUMBER, mPhone.getCdmaMin());
if (getResources().getBoolean(R.bool.config_msid_enable)) {
findPreference(KEY_MIN_NUMBER).setTitle(R.string.status_msid_number);
}
setSummaryText(KEY_PRL_VERSION, mPhone.getCdmaPrlVersion());
removePreferenceFromScreen(KEY_IMEI_SV);
if (mPhone.getLteOnCdmaMode() == PhoneConstants.LTE_ON_CDMA_TRUE) {
// Show ICC ID and IMEI for LTE device
setSummaryText(KEY_ICC_ID, mPhone.getIccSerialNumber());
setSummaryText(KEY_IMEI, mPhone.getImei());
} else {
// device is not GSM/UMTS, do not display GSM/UMTS features
// check Null in case no specified preference in overlay xml
removePreferenceFromScreen(KEY_IMEI);
removePreferenceFromScreen(KEY_ICC_ID);
}
} else {
setSummaryText(KEY_IMEI, mPhone.getDeviceId());
setSummaryText(KEY_IMEI_SV,
((TelephonyManager) getSystemService(TELEPHONY_SERVICE))
.getDeviceSoftwareVersion());
// device is not CDMA, do not display CDMA features
// check Null in case no specified preference in overlay xml
removePreferenceFromScreen(KEY_PRL_VERSION);
removePreferenceFromScreen(KEY_MEID_NUMBER);
removePreferenceFromScreen(KEY_MIN_NUMBER);
removePreferenceFromScreen(KEY_ICC_ID);
// only show area info when SIM country is Brazil
if ("br".equals(mTelephonyManager.getSimCountryIso())) {
mShowLatestAreaInfo = true;
}
}
在双 SIM 卡设备中,每个 SIM 插槽都有两个 IMEI 号码。两者都是静态的。第一个 IMEI 号用于第一个插槽,第二个 IMEI 号用于第二个插槽。