2011-04-13 108 views
17

我正在开发一个需要获取IMSI的应用程序。我使用:从android手机获取IMSI?

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

它适用于大多数手机上,但也有少数手机只返回6位而不是15哪项是错误的。

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

问候

+0

好了,原来,一些Android系统手机没有返回完整的IMSI(错误)。我用一些特殊的硬件从sim中提取imsi,并提取完整的imsi,这意味着sim很好。因此,问题在于Android无法提取完整的IMSI。我在索尼爱立信Mini Experia中发现了这个错误。 – omega 2011-06-01 16:08:53

回答

7

根据this post可以使用

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

但SystemProperties是不能直接访问,所以你需要使用的招数之一,在回答这个问题:Where is android.os.SystemProperties

您可能还需要SystemProperties source

+0

我无法找到类“android.telephony.TelephonyProperties”的任何提及,只有'com.android.internal.telephony.TelephonyProperties',但在那里没有'PROPERTY_IMSI'常量。 – 2017-02-17 17:03:49

5

第一:从维基

的IMSI通常呈现为15 位长的数字,但也可以是更短的

短指一个较旧的IMSI模型,这是14个数字。这是不是与此有关

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

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

3

此代码适用于我的项目。

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

,不要忘记权限:

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

尽管我鼓励你积极参与SO,但这是对4年前提出的问题的回答。此外,您的答案似乎没有为现有答案带来任何新的突出元素,并且原作者已将答案标记为原始问题。软件和SO正在快速发展,请考虑查看新问题或未回答的问题来回答。 – 2015-04-16 03:14:02