首先关闭MSISDN与电话号码相同。 我一直在调查是否有可能从Andoid手机上取下手机号码。
我的研究结果是肯定的,没有。
可以使用TelephonyManager和getLine1Number()。然而,这是不可靠的。
我已使用摩托罗拉Atrix对上述内容进行了测试,但未检索到有效的电话号码。在水中死了吧?
我可以使用TelephonyManager和getVoiceMailNumber()取消手机号码。
我不会猜到语音信箱号码是我的实际电话号码(MSISDN)。
所以我的问题是,检查getLine1Number()或getVoiceMailNumber()是获得MSISDN的可靠方法吗? (即:如果getLine1Number返回0000000000000,则检查getVoiceMailNumber或其他内容。)
在能够从getVoiceMailNumber()获取MSISDN之前,本网站上没有人提到这一点,这绝对不明显,几乎与文档相矛盾,但事实是它适用于我的特定设备。 (在其他设备上未经测试)
答案 0 :(得分:3)
如果使用getVoiceMailNumber(),它将不会100%可靠。很多时候这可能会给出电话号码但是如果手机获得固件更新并且这个号码改变了什么呢?说一个简短的代码?所以不,它不可靠。
如果您可以从getLine1Number()获取号码,那么为什么不提示用户输入号码?您可以通过向该号码发送带有短代码的短信来验证它,用户在继续进行操作之前需要在该短信中输入。
答案 1 :(得分:2)
这是一个老问题。但是,我想分享一些可能有助于未来人们的信息:
getLine1Number()
返回第1行的电话号码字符串,例如GSM手机的MSISDN。如果不可用则返回null。
MSISDN是电话号码。但是,MSISDN存储在SIM卡中的文件中。主要问题是填写该文件不是强制性的。所以,你有一些包含MSISDN的sim卡,而其他sim卡没有这些信息。
因此,阅读MSISDN完全不可靠。
getVoiceMailNumber()
返回语音邮件号码。如果不可用则返回null。
这也不可靠,因为此号码从运营商变为运营商。某些运营商将您自己的电话号码用作语音邮件。但是,其他一些运营商使用不同的数字,如* 55或类似的东西。
因此,确定自己的电话号码非常困难。所以,请避免使用电话号码。
答案 2 :(得分:1)
另一种方法是让用户输入他们的号码。 然后发送短信到这个输入的号码。
验证是否已收到此消息,然后您可以断然说用户已输入正确的MSISDN并存储此消息。
简单:)