我想获得Android设备的电话号码。我使用这段代码:
TelephonyManager tm = (TelephonyManager)this.getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);
String phoneNumber= tm.getLine1Number();
在我的手机上(HTC Wildfire)我无法获得电话号码 - 我得到的只是空字符串。如果我在emulatur上运行代码,通常会显示电话号码。
如果我转到设置=>关于电话=>电话身份 - >电话号码,电话号码是“未知”。
问题出在哪里?我的SIM卡有问题吗?
答案 0 :(得分:35)
我们的项目遇到了同样的问题。结论是它取决于SIM卡。
我们发生了什么事:
其他论坛也有报道。
最后我们决定向用户询问电话号码。实际上有点涉及: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卡移动到新手机时,我有时会发现手机号码没有出现在设置中 - >关于手机 - >状态 - >我的电话号码。
我的数据点:
答案 4 :(得分:0)
如果SIM卡允许,则可以使用电话号码。 在我们公司,我发现只有一个SIM卡,允许获取号码。我在所有Android设备上使用此SIM卡。一切都好。 getLine1Number()没问题。 现在我正在寻找其他SIM卡的电话号码。已经发送短信到我们的短信服务器或其他Android设备(处理短信)
答案 5 :(得分:0)
我使用的SIM卡只允许数据传输。它不允许打电话。
当我尝试使用getLine1Number()
获取电话号码时,我会收到空字符串。