TelephonyManager.getLine1Number()失败?

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

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

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

如果我去设置=>关于电话=>电话标识 – >电话号码,电话号码是“未知”。

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

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

我们发生了什么事

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

这在其他论坛也有报道。

最后,我们决定要求用户input电话号码。 实际上有一点涉及: if( "SIM card present" && "cannot read the cell number") "ask user"; 。 否则,我们将继续窃听首先没有SIM卡的用户。

SIM卡的序列号始终是一个有效的值,而不是电话号码。

  telephonyManager.getSimSerialNumber(); 

SIM序列号在操作员中至less是唯一的。 所以结合在一起

  telephonyManager.getNetworkOperator(); 

您将在一个国家内拥有用户的唯一标识符。

这与之相结合

  telephonyManager.getNetworkCountryIso(); 

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

希望这会有所帮助。

干杯。

SIM卡存储电话号码,可以由您编辑。 不能说Android的,但在WM,你可以很容易地编辑你的电话号码,这是存储在SIM卡上。 当然,这并不意味着您可以即时更改您的电话号码。 其实,你可以自由地写任何你喜欢的数字,程序会相信,这是你的真实数字:)

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

我的数据点:

  • AT&T Atrix把全新的SIM卡放在里面说:“语音MSISDN Line1 null”。
  • T-Mobile G1将新的SIM卡正确显示在电话号码中。
  • T-Mobile G2将我旧G1移动的SIM卡写入“未知”。

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

当我尝试getLine1Number()获取phonenumber,我得到空string。

电话号码可用,如果SIM卡是允许他得到他的。 在我们公司,我发现只有一个SIM卡,这是允许的号码。 我在所有的Android设备上嘲笑这个SIM卡。 一切都好。 getLine1Number()是可以的。 现在我正在寻找其他SIM卡的电话号码。 有短信发送到我们的短信服务器或其他Android设备(处理短信)