0

我有一个 Android 手机应用程序可以访问电话号码以获取注册信息,如下所示:

    String thisPhoneNumber = "0";
    try {
        TelephonyManager tMgr=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
        thisPhoneNumber = tMgr.getLine1Number(); }
    catch (Exception e) { }

它在手机上运行良好。一位朋友在平板电脑上尝试过(最近的一款),应用程序崩溃了。如果我注释掉 try/catch 的 4 行,它工作正常,所以看起来崩溃必须在 getSystemService 调用上。

在一些搜索stackoverflow中,听起来代码应该在任一平台上运行,但这不是我所看到的。

try/catch 不应该防止崩溃并允许处理异常吗?

有没有其他方法可以让 getSystemService 执行而不会在平板电脑上崩溃?还是我不必在平板电脑上拨打电话?

4

1 回答 1

0

使用 if 语句检查这 2-3 行中的变量是否为空,如果是则停止执行代码,例如

尝试 { TelephonyManager tMgr=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); if(tMgr!=null) thisPhoneNumber = tMgr.getLine1Number(); } 导管(异常 o){}

或者您可以尝试查找设备是平板电脑还是手机(手机或非手机设备),然后在 if code if(phone) { the code} 中执行两个不同的语句,或者您可以使用抽象类和函数查找电话号码并做一些想像

if(device is phone)
{
  apstractClass=new phoneImplementation();
} else
{
  apstractClass= new nonPhoneImplementation();if (((TelephonyManager)getContext().getSystemService(Context.TELEPHONY_SERVICE)).getLine1Number()
== null)

{ // 没有电话 } enter code here } thisPhoneNumber=apstarctClass.getPhoneNumber()

其中 phoneImplementation().getPhoneNumber() 将包含您的代码,问题中的代码和 nonPhoneImplementation().getPhoneNumber() 将返回 0

如果设备具有电话功能,您可以检查此

if (((TelephonyManager)getContext().getSystemService(Context.TELEPHONY_SERVICE)).getLine1Number()
    == null)
{
    // no phone
} 

我的观点是,这将解决您的问题:

String thisPhoneNumber = "0";
try
{
    if (((TelephonyManager)getContext().getSystemService(Context.TELEPHONY_SERVICE)).getLine1Number()
        != null)
    {
         thisPhoneNumber = tMgr.getLine1Number();
    } }
catch(Exception o)
{}
于 2012-11-05T23:06:25.677 回答