2011-04-13 107 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