1

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

5 回答 5

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. 或者我们可以有一个短信网关,当我们需要电话号码的时候,我们可以向网关发送短信,然后部署一个webservice返回号码,短信网关接收消息,但是这种方案的成本很高。

于 2012-07-18T05:10:37.167 回答
1

为了从设备中获取电话号码,首先您必须在设备上设置自己的电话号码,只需通过:

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

当您调用此代码时:

MyPhoneNumber = tMgr.getLine1Number();

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

于 2012-07-18T09:32:20.943 回答
1

在此处输入图像描述

TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);

字符串编号 = tm.getLine1Number();

于 2017-10-09T10:55:34.013 回答
0

有时电话号码未在电话设置中设置。在这些情况下,getLine1Number()将返回 null。您将需要找出一种替代方法来跟踪您正在跟踪的任何内容。

这是人们经常遇到的问题。我在android上编程不多,但我看到这个被问了很多。确保您使用搜索来检查您所问的问题是否曾被问过。

于 2012-07-18T05:02:56.713 回答
0

添加清单 READPHONESTATE 权限

你可以用

if(MyPhoneNumber.length<0)
             MyPhoneNumber = tMgr.getSubscriberId();
于 2012-07-18T05:17:04.210 回答