android 代码获取IMEI,IMSI都为空,怎么解决?

2025-05-22 09:59:57
推荐回答(2个)
回答1:

Android获取IMSI和IMEI :

IMSI是一个唯一的数字,标识了GSM和UMTS 网络里的唯一一个用户. 

它存储 在手机的SIM卡里,它会通过手机发送到网络上。

IMEI也是一串唯一的数字,标识了GSM 和UMTS网络里的三星 Galaxy I9100.。

它通常被打印在手机里电池下面的那一面,拨  *#06# 也能看到它。

代码: 

这里是你在Android里读出 唯一的 IMSI-ID / IMEI-ID 的方法。

Java:  

String myIMSI = 

android.os.SystemProperties.get(android.telephony.TelephonyProperties.PROPERTY_IMSI

); 

// within my emulator it returns:   310995000000000 

String myIMEI = 

android.os.SystemProperties.get(android.telephony.TelephonyProperties.PROPERTY_IMEI

); 

// within my emulator it returns:   000000000000000 

手机号码不是所有的都能获取。只是有一部分可以拿到。这个是由于移动运营商没有把手

机号码的数据写入到sim卡中。sim卡只有唯一的编号,供网络与设备识别那就是imsi号码,手机的信号也可以说是通过这个号码在网络中传递的,并不是手机号码。

试想,你的sim丢失后,补办一张新的会换号码吗? —不会就是因为在你的手机号码对应的 imsi号在移动运营商中被修改成新sim卡的imsi号码。

这个就像是一个变量,当移动运营商为它赋值了,它自然就会有值。不赋值自然为空。

/**   * 获得手机的一些标志符*     * @param c  * @return String 手机的类型 */ 

public String fetch_status(Context c) { 

TelephonyManager tm = (TelephonyManager) c 

.getSystemService(Context.TELEPHONY_SERVICE);//       

String str = ""; 

String IMSI = tm.getSubscriberId(); 

str += "DeviceId(IMEI) = " + tm.getDeviceId() + "/n";  

str += "DeviceSoftwareVersion = " + tm.getDeviceSoftwareVersion() 

+ "/n"; 

str += "Line1Number = " + tm.getLine1Number() + "/n";

return str;

}

回答2:

/**
* 返回手机串号
*
* @return
*/
public String getIMEI() {
TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
return telephonyManager.getDeviceId();
}

我这样取是没有问题的