从Android手机获取IMSI?

时间:2011-04-13 22:43:27

标签: android

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

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

适用于大多数手机,但有些手机仅返回6位而不是15位。这是错误的。

任何人都知道以编程方式检索IMSI的另一种方法吗?其他APIS?方法

此致

3 个答案:

答案 0 :(得分:7)

根据this post,你可以使用

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

但SystemProperties无法直接访问,因此您需要在此问题的答案中使用其中一个技巧:Where is android.os.SystemProperties

您可能还需要SystemProperties source

答案 1 :(得分:5)

来自Wiki的

第一次

  

IMSI通常以15表示   数字长,但可以更短

short指的是14位数的旧版imsi模型。这与此无关

第二:它不取决于手机而是取决于网络

它返回6位数,因为该特定手机上的Android软件配置为仅返回imsi的非个人识别部分 - 定义国家和网络运营商的前6位数字

答案 2 :(得分:5)

此代码在我的项目中运作良好。

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

并且不要忘记许可:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>