安卓系统中“获取电话号码”的确切解决方案

4
我尝试使用以下代码获取自己的电话号码:
TelephonyManager Mgr=(TelephonyManager)Context.getSystemService(Context.TELEPHONY_SERVICE);  
mPhoneNumber = tMgr.getLine1Number();

使用

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

但它没有正常工作。

在安卓设备上获取电话号码的确切解决方案是什么?

感谢您。


2
不是所有的运营商都在SIM卡上包含电话号码。 - moujib
1
我同意上面的评论。有时候获取自己的电话号码并不总是可能的。 - David Wasser
如果日志记录中显示任何错误,请仅返回已翻译的文本。 - Aerrow
代码返回空字符串。这种方式并不适用于像Moujib和David所说的每个操作员。 - qwerty
在使用任何代码之前,请尝试检查SIM卡上是否有任何电话号码,在您的Droid手机上转到“设置”,然后关于手机状态并滚动到电话号码。如果为空白,请不要费心编码。 - moujib
在手机状态下,我的电话号码是未知的,问题就出在这里,这段代码从这里获取。 - qwerty
5个回答

5
“在Android中获取电话号码”的确切解决方案是什么?
让用户在中输入电话号码,可以配置为。 Android SDK中没有支持检索设备电话号码的功能,因为设备可能不知道其电话号码 - 只有运营商需要知道。 此外,有几种情况需要用户指定他们希望使用哪个可能的电话号码:
- 双卡手机 - 将其他电话号码转移到此设备或使用呼叫转移将呼叫路由到此设备的人员 - 使用SIP号码或其他他们喜欢与设备一起使用的VOIP电话号码的人员

伟大的答案,一劳永逸。 - moujib
首先感谢您的回答。我想要自动发送短信,但显然这是不可能的。 - qwerty

1
从手机编程方式向电子邮件地址发送彩信,存储在您的服务器上,并读取发送方号码。

这是一种方法,但是这种方法会给最终用户带来费用,所以我不确定它是否是最好的方法。 - Rafael Ruiz Tabares

1

TelephonyManager 不是正确的解决方案,因为在某些情况下号码并不存储在SIM卡中。基于我的建议,您应该使用共享首选项来存储用户的电话号码,在应用程序第一次打开时存储该号码,之后在应用程序中需要时将使用该号码。


0
public String myNO()
{
    return ((TelephonyManager) getSystemService(TELEPHONY_SERVICE)).getLine1Number();
}

试一下这个


3
并非所有情况下都适用。有些运营商不会将电话号码存储在SIM卡上,因此在这种情况下,您无法通过这种方式获取号码。 - David Wasser
感谢您的关注,但返回空字符串。此代码的互操作性会根据移动运营商而变化。 - qwerty

0
请使用以下代码:
   private String getMyPhoneNumber(){
    TelephonyManager mTelephonyMgr;
    mTelephonyMgr = (TelephonyManager)
        getSystemService(Context.TELEPHONY_SERVICE); 
    return mTelephonyMgr.getLine1Number();
}

private String getMy10DigitPhoneNumber(){
    String s = getMyPhoneNumber();
    return s.substring(2);
}

你的确切需求是什么?你需要设备ID还是用户手机号码? - Aerrow
正如我在其他地方评论的那样,这并不可靠。它只有在SIM卡中包含电话号码时才有效。在许多情况下,它并不适用。 - David Wasser
感谢Aerrow的帮助。你的代码是正确的,但不适用于每个操作符(例如我的)。 - qwerty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接