1

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

我的研究结果是肯定的和否定的。

可以使用TelephonyManagergetLine1Number()。然而,这是不可靠的。

我已经用摩托罗拉 Atrix 测试了上述内容,但这并没有检索到有效的电话号码。就这么死在水里了吗?

好吧,我能够使用TelephonyManagergetVoiceMailNumber()从电话中获取电话号码。

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

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

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

4

3 回答 3

3

如果您使用 getVoiceMailNumber(),它不会 100% 可靠。很多时候,这可能会给出电话号码,但如果手机获得固件更新并且这个号码更改为其他号码怎么办?说一个短代码?所以不,它不可靠。

如果您可以从 getLine1Number() 获取号码,那么为什么不提示用户输入号码?您可以通过向该号码发送带有短代码的 SMS 消息来验证它,用户需要在继续之前在应用程序中输入该短代码。

于 2011-10-27T21:44:30.990 回答
2

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

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

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

所以,阅读 MSISDN 是完全不可靠的。

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

这也是不可靠的,因为这个数字因运营商而异。一些运营商将您自己的电话号码用作语音邮件。但是,其他一些运营商使用不同的数字,例如 *55 或类似的数字。

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

于 2016-08-03T03:13:29.347 回答
1

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

验证是否已收到此消息,然后您可以明确地说用户已输入正确的 MSISDN 并且您将其存储。

简单的:)

于 2012-05-03T11:23:30.707 回答