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设备(处理短信)