从Android手机获取可靠的MSISDN? VoiceMailNumber Line1Number

首先关闭MSISDN与电话号码相同。 我一直在研究是否可以从Andoid手机上取下手机号码。

我的研究结果是肯定的,没有。

可以使用TelephonyManager和getLine1Number() 。 然而,这是不可靠的。

我已经使用摩托罗拉Atrix测试了上述内容,但这并未检索到有效的电话号码。 在水中死了吧?

好吧,我可以使用TelephonyManager和getVoiceMailNumber()从电话中获取电话号码。

我不会猜到语音邮件号码是我的实际电话号码(MSISDN)。

所以我的问题是,检查getLine1Number()或getVoiceMailNumber()是否是获取MSISDN的可靠方法? (即:如果getLine1Number返回0000000000000,则检查getVoiceMailNumber或其他内容。)

在能够从getVoiceMailNumber()获取MSISDN之前,本网站上没有人提到这一点,这绝对不明显,几乎与文档相矛盾,但事实是它适用于我的特定设备。 (未经测试在其他设备上)

如果使用getVoiceMailNumber(),它将不会100%可靠。 很多时候这可能会给出电话号码,但如果手机获得固件更新并且这个数字会改变其他内容呢? 说一个简短的代码? 所以不,它不可靠。

如果您可以从getLine1Number()获取数字,那么为什么不提示用户输入数字? 您可以通过向该号码发送带有短代码的SMS消息来validation它,在进一步操作之前,用户需要在该代码中输入该代码。

这是一个老问题。 但是,我想分享一些可能有助于未来人们的信息:

getLine1Number()返回第1行的电话号码字符串,例如GSM手机的MSISDN。 如果不可用则返回null。

MSISDN是电话号码。 但是,MSISDN存储在SIM卡中的文件中。 主要问题是填写该文件不是强制性的。 所以,你有一些包含MSISDN的sim卡,而其他sim卡没有这些信息。

因此,阅读MSISDN完全不可靠。

getVoiceMailNumber()返回语音邮件号码。 如果不可用则返回null。

这也是不可靠的,因为这个数字从载波变为载波。 有些运营商使用自己的电话号码作为语音邮件。 但是,其他一些运营商使用不同的数字,如* 55或类似的东西。

因此,很难确定您自己的电话号码。 所以,避免使用电话号码。

另一种方法是让用户输入他们的号码。 然后发送短信到这个输入的号码。

validation是否已收到此消息,然后您可以断然说用户已输入正确的MSISDN并存储此消息。

简单:)