網(wǎng)絡(luò)請求的時候需要根據(jù)設(shè)備號id傳參骨宠,但是服務(wù)端后臺收到的有時候為空,服務(wù)端的存儲就為1個0 相满。而手機(jī)設(shè)備號獲取與手機(jī)本身注冊的網(wǎng)相關(guān)
本人經(jīng)測試情況魅藍(lán)note5诱篷、1:全網(wǎng)通、2張聯(lián)通卡雳灵、獲取結(jié)果為
IMEI1
的值。
通過查詢API調(diào)用getDeviceId()
源碼可知
通過
getDeviceId
獲取的為IMEI
和MEID
和ESN
/**
* Returns the unique device ID, for example, the IMEI for GSM and the MEID
* or ESN for CDMA phones. Return null if device ID is not available.
*
* @deprecated Use (@link getImei} which returns IMEI for GSM or (@link getMeid} which returns
* MEID for CDMA.
*/
@Deprecated
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getDeviceId() {
try {
ITelephony telephony = getITelephony();
if (telephony == null)
return null;
return telephony.getDeviceId(mContext.getOpPackageName());
} catch (RemoteException ex) {
return null;
} catch (NullPointerException ex) {
return null;
}
}
經(jīng)查閱可知:
參考來自:http://www.reibang.com/p/740e9116281f
IMEI(International Mobile Equipment Identity) 是國際移動設(shè)備身份碼的縮寫闸盔,國際移動裝備辨識碼悯辙,是由15位數(shù)字組成的"電子串號",它與每臺移動電話機(jī)一一對應(yīng)迎吵,而且該碼是全世界唯一的躲撰。
MEID 移動設(shè)備識別碼(Mobile Equipment Identifier)是CDMA手機(jī)的身份識別碼,也是每臺CDMA手機(jī)或通訊平板唯一的識別碼击费。
移動:2G使用 GSM拢蛋, 3G使用 TD-SCDMA 4G使用TD-LTE
聯(lián)通:2G使用 GSM, 3G使用 WCDMA 4G使用TD-LTE蔫巩、FDD-LTE
電信:2G使用 CDMA谆棱,3G使用 CDMA2000 4G使用TD-LTE、FDD-LTE
所以圆仔,IMEI是聯(lián)通移動手機(jī)的標(biāo)識垃瞧,MEID是電信手機(jī)的標(biāo)識。(坪郭?待考證:因為官方說的只是GSM和CDMA个从,而2g網(wǎng)絡(luò)基本上不存在了吧?)
參考來自:https://blog.csdn.net/zichuanzhu/article/details/54693687(未考究)
正常情況下 getDeviceId()這個方法的返回值和當(dāng)時卡槽注冊的phone有關(guān)
- 如果注冊的是CDMA 返回的是MEID(電信)
- 如果注冊是的GMS網(wǎng)絡(luò)歪沃,返回的是IMIE
- 如果一直沒插卡 沒注冊phone默認(rèn)獲取IMEI
1.不插卡怎么讀 :不插卡的話 會保持上一次插卡是的phone狀態(tài)
- 插卡:即上一次插得是CDMA的嗦锐,獲取的是MEID (電信)
- 插得是GMS的獲取的是IMEI
- 如果之前一直沒有插過卡 默認(rèn)獲取IMEI
2.插一個怎么讀
- 插得是CDMA卡獲取MEID(電信)
- 插得是GMS卡獲取的是IMEI
- 不插卡的卡槽同問題1
插兩個怎么讀 ?哪個,實踐出真理沪曙。
- 哪個卡槽插得是CDMA卡獲取的是MEID (電信)
- 哪個卡槽插得是GMS卡獲取的是IMEI
插了再拔出來怎么讀
- 插出來后保持上一次的狀態(tài) 同問題1
移動聯(lián)通怎么讀奕污?
`slotIndex`看源碼估計就是?
/**
* Get slotIndex associated with the subscription.
* @return slotIndex as a positive integer or a negative value if an error either
* SIM_NOT_INSERTED or < 0 if an invalid slot index
* @hide
*/
public static int getSlotIndex(int subId) {
if (!isValidSubscriptionId(subId)) {
if (DBG) {
logd("[getSlotIndex]- fail");
}
}
int result = INVALID_SIM_SLOT_INDEX;
try {
ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub"));
if (iSub != null) {
result = iSub.getSlotIndex(subId);
}
} catch (RemoteException ex) {
// ignore it
}
return result;
}
/**
* Returns the IMEI (International Mobile Equipment Identity). Return null if IMEI is not
* available.
*
* @param slotIndex of which IMEI is returned
*/
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getImei(int slotIndex) {
ITelephony telephony = getITelephony();
if (telephony == null) return null;
try {
return telephony.getImeiForSlot(slotIndex, getOpPackageName());
} catch (RemoteException ex) {
return null;
} catch (NullPointerException ex) {
return null;
}
}
- 建議統(tǒng)一調(diào)用getimei(int)這個接口 這個接口不管手機(jī)注冊的什么網(wǎng)絡(luò) 均返回IMEI不會根據(jù)插的卡而改變返回值。
電信怎么讀
/**
* Returns the MEID (Mobile Equipment Identifier). Return null if MEID is not available.
*
* @param slotIndex of which MEID is returned
*/
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public String getMeid(int slotIndex) {
ITelephony telephony = getITelephony();
if (telephony == null) return null;
try {
return telephony.getMeidForSlot(slotIndex, getOpPackageName());
} catch (RemoteException ex) {
return null;
} catch (NullPointerException ex) {
return null;
}
}