从Android手机上得到IMSI?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

我正在开发一个需要获取IMSI的应用程序。我用:

TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String imsi = mTelephonyMgr.getSubscriberId();

它适用于大多数手机,但少数手机只能返回6位而不是15位。这是错误的。

谁知道一种以编程方式检索IMSI的替代方法?其他APIS?方法?

提问于
用户回答回答于

根据这篇文章,你可以使用

String imsi = android.os.SystemProperties.get(android.telephony.TelephonyProperties.PROPERTY_IMSI);

但是SystemProperties不能直接访问,所以你需要在这个问题的答案中使用其中的一个技巧:Where is android.os.SystemProperties

你可能还需要SystemProperties源代码

用户回答回答于

第一:来自Wiki

IMSI通常表示为一个15位长的数字,但可以更短。

更短的是指一个较旧的IMSI模型,它是14位。在这里不相关。

第二:它不依赖于手机,而是依赖于网络。

它返回6位,因为在特定手机上的android软件被配置为只返回imsi的非个人标识部分--定义国家和网络运营商的前6位数字。

扫码关注云+社区