【发布时间】:2019-02-02 03:21:20
【问题描述】:
我想知道如何从 sim 卡而不是 sim 序列号获取实际电话号码。我也尝试过 (manager.getLine1Number),但它给了我 null。
【问题讨论】:
标签: android
我想知道如何从 sim 卡而不是 sim 序列号获取实际电话号码。我也尝试过 (manager.getLine1Number),但它给了我 null。
【问题讨论】:
标签: android
参考:How to get the mobile number of current sim card in real device?
TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String number = tm.getLine1Number();
The documentation for getLine1Number() 表示如果号码“不可用”,此方法将返回 null,但没有说明号码何时可能不可用。
您需要提供您的application permission,通过将以下内容添加到您的清单中来进行此查询:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
(您不应使用 TelephonyManager.getDefault() 来获取 TelephonyManager,因为这是一个未记录的私有 API 调用,并且将来可能会更改。)
或
参考:TelephonyManager give me null
> getLine1Number(); returns whatever is stored on the SIM card's MSISDN,
> which isn't filled by some operators.
在你的情况下,我很确定 MSISDN 是空缺的。
你应该记住一件事。
getLine1Number() 有时会返回空值或原来存储在 SIM 卡中的电话号码。
【讨论】:
空引用可能表示无法访问电话号码。
文档:
请注意,对某些电话信息的访问是受权限保护的。您的应用程序无法访问受保护的信息,除非它具有在其清单文件中声明的适当权限。在适用权限的情况下,它们会在您访问受保护信息的方法中注明。
所需权限:
READ_PHONE_STATE、READ_SMS、READ_PHONE_NUMBERS link to method doc
我还发现另一个问题面临着与您命名的方法“不起作用”的非常相似的问题。那里也有人提到了一个重复的问题。这也可能会有所帮助: Link
如果那里的代码对您没有帮助,我建议您检查方法的确切文档以查找详细信息,以及返回空引用的原因。
【讨论】: