TelephonyManager.getLine1Number()失败了吗?

时间:2011-02-27 16:36:46

标签: android phone-number

我想获得Android设备的电话号码。我使用这段代码:

TelephonyManager tm = (TelephonyManager)this.getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE); 
String phoneNumber=  tm.getLine1Number();

在我的手机上(HTC Wildfire)我无法获得电话号码 - 我得到的只是空字符串。如果我在emulatur上运行代码,通常会显示电话号码。

如果我转到设置=>关于电话=>电话身份 - >电话号码,电话号码是“未知”。

问题出在哪里?我的SIM卡有问题吗?

6 个答案:

答案 0 :(得分:35)

我们的项目遇到了同样的问题。结论是它取决于SIM卡。

我们发生了什么事:

  • 带有AT& T SIM卡的Galaxy S:可以读取电话号码,设置显示号码
  • 与欧洲SIM卡相同的Galaxy:无法读取设置中的数字和“未知”(手机功能完备,无法读取数字)

其他论坛也有报道。

最后我们决定向用户询问电话号码。实际上有点涉及:if( "SIM card present" && "cannot read the cell number") "ask user"; 。否则,我们将首先窃听不是SIM卡的用户。

答案 1 :(得分:11)

使用SIM卡序列号代替电话号码,该序列号始终存在且始终为有效值。

 telephonyManager.getSimSerialNumber();

SIM序列号至少在运营商中是唯一的。结合

 telephonyManager.getNetworkOperator();

您将拥有一个国家/地区内订阅者的唯一标识符。

结合

 telephonyManager.getNetworkCountryIso();

您将拥有订阅者的全球唯一标识符。

希望这会有所帮助。

干杯。

答案 2 :(得分:5)

SIM卡存储电话号码,您可以编辑它。不能说对于Android,但在WM上,您可以轻松编辑存储在SIM卡上的电话号码。 当然,这并不意味着您可以动态更改电话号码。实际上,你可以自由地在那里写任何你喜欢的号码,程序会相信,这是你的真实号码:)

答案 3 :(得分:2)

当我将SIM卡移动到新手机时,我有时会发现手机号码没有出现在设置中 - >关于手机 - >状态 - >我的电话号码。

我的数据点:

  • AT& T Atrix在其中添加了全新的SIM卡“Voice MSISDN Line1 null”。
  • T-Mobile G1将新SIM卡正确显示在电话号码中。
  • T-Mobile G2将SIM卡从我原来的G1转移到“未知”。

答案 4 :(得分:0)

如果SIM卡允许,则可以使用电话号码。 在我们公司,我发现只有一个SIM卡,允许获取号码。我在所有Android设备上使用此SIM卡。一切都好。 getLine1Number()没问题。 现在我正在寻找其他SIM卡的电话号码。已经发送短信到我们的短信服务器或其他Android设备(处理短信)

答案 5 :(得分:0)

我使用的SIM卡只允许数据传输。它不允许打电话。

当我尝试使用getLine1Number()获取电话号码时,我会收到空​​字符串。