我正在尝试使用以下代码读取设备的电话号码。当电话号码不可用时,我会读取订阅者 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();
最佳答案
每个运营商的 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();
或者我们可以有一个短信网关,每当我们需要电话号码时,我们可以向网关发送一条短信,然后部署一个网络服务来返回号码,短信网关接收消息,但是这解决方案成本高昂。
关于android - 读取设备电话号码抛出 NULLPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11534534/