读取设备电话号码会抛出NULLPointerException

时间:2012-07-18 04:59:51

标签: android nullpointerexception phone-number

我正在尝试使用以下代码读取设备的电话号码。当电话号码不可用时,我会读取订阅者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();

5 个答案:

答案 0 :(得分:6)

每个运营商都没有SIM卡上的电话号码,例如印度的Sim在任何内存中都没有电话号码,所以我们无法通过这些连接获得电话号码。但是,一些国家和运营商已经在SIM卡上存储了电话号码,我们可以获得这些号码。为了使其适用于所有设备,我们可以采用两种策略:

  1. 为了避免空指针异常,我们可以捕获错误并相应地工作。像:

    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();
    
  2. 或者我们可以拥有一个短信网关,每当我们需要电话号码时,我们都可以向网关发送短信,然后部署一个网络服务来返回该号码,短信网关接收该消息,不过这个解决方案成本很高。

答案 1 :(得分:1)

要从设备获取电话号码,首先您必须在设备上设置自己的电话号码,然后通过:

  

设置 - >关于手机 - >状态 - >我的电话号码

当您拨打此代码时:

MyPhoneNumber = tMgr.getLine1Number();

存储的号码实际上正在返回。

答案 2 :(得分:1)

enter image description here

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();