【问题标题】:getting IMSI from android phone?从安卓手机获取IMSI?
【发布时间】:2011-08-05 02:54:14
【问题描述】:

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

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

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

有人知道以编程方式检索 IMSI 的替代方法吗?其他 API?方法?

问候

【问题讨论】:

  • 好吧,原来有些安卓手机没有返回完整的 Imsi(错误)。我使用了一些特殊的硬件从 sim 中提取 imsi,它提取了完整的 imsi,这意味着 sim 很好。因此,问题是 Android 无法提取完整的 IMSI。我在 Sony Ericsson Mini Experia 中发现了这个错误。

标签: android


【解决方案1】:

根据this post可以使用

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

但 SystemProperties 不能直接访问,因此您需要使用答案中的技巧之一来回答这个问题:Where is android.os.SystemProperties

您可能还需要SystemProperties source

【讨论】:

  • 我找不到任何提到类 android.telephony.TelephonyProperties,只有 com.android.internal.telephony.TelephonyProperties,但那里没有 PROPERTY_IMSI 常量。
【解决方案2】:

第一:来自维基

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

shorter 指的是 14 位的较旧 imsi 模型。在这里不相关

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

它返回 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"/>
    

    【讨论】:

    • 虽然我鼓励您积极参与 SO,但这是对 4 年前提出的问题的回答。此外,您的答案似乎没有为现有答案带来任何新的突出元素,并且原始问题已被作者标记为已回答。软件和 SO 正在快速发展,请考虑查看新问题或未回答的问题来回答。
    猜你喜欢
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多