我正在尝试使用以下代码读取设备的电话号码。当电话号码不可用时,我会读取订阅者ID。它适用于某些手机,并在某些设备中抛出NULL指针异常。设备日志显示我在以下行中获得NULL指针异常
if(MyPhoneNumber.equals(""))
请告诉我如何在所有设备上使用它。
TelephonyManager tMgr =(TelephonyManager)ShowMyLocation.this.getSystemService(Context.TELEPHONY_SERVICE);
String MyPhoneNumber = tMgr.getLine1Number();
if(MyPhoneNumber.equals(""))
MyPhoneNumber = tMgr.getSubscriberId();
答案 0 :(得分:6)
每个运营商都没有SIM卡上的电话号码,例如印度的Sim在任何内存中都没有电话号码,所以我们无法通过这些连接获得电话号码。但是,一些国家和运营商已经在SIM卡上存储了电话号码,我们可以获得这些号码。为了使其适用于所有设备,我们可以采用两种策略:
为了避免空指针异常,我们可以捕获错误并相应地工作。像:
TelephonyManager tMgr = (TelephonyManager)
ShowMyLocation.this.getSystemService(Context.TELEPHONY_SERVICE);
String MyPhoneNumber = "0000000000";
try
{
MyPhoneNumber =tMgr.getLine1Number();
}
catch(NullPointerException ex)
{
}
if(MyPhoneNumber.equals(""))
MyPhoneNumber = tMgr.getSubscriberId();
或者我们可以拥有一个短信网关,每当我们需要电话号码时,我们都可以向网关发送短信,然后部署一个网络服务来返回该号码,短信网关接收该消息,不过这个解决方案成本很高。
答案 1 :(得分:1)
要从设备获取电话号码,首先您必须在设备上设置自己的电话号码,然后通过:
设置 - >关于手机 - >状态 - >我的电话号码
当您拨打此代码时:
MyPhoneNumber = tMgr.getLine1Number();
存储的号码实际上正在返回。
答案 2 :(得分:1)
TelephonyManager tm =(TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String number = tm.getLine1Number();
答案 3 :(得分:0)
有时手机设置中未设置电话号码。在这些情况下,getLine1Number()
将返回null。您需要找出一种跟踪您正在跟踪的内容的替代方法。
这是一个人们遇到很多问题。我没有在android上编程,但我见过这个问题很多。请务必使用搜索来检查您之前是否询问过您提出的问题。
答案 4 :(得分:0)
添加清单READPHONESTATE权限
可以使用
if(MyPhoneNumber.length<0)
MyPhoneNumber = tMgr.getSubscriberId();