在android中获取signalstrength时的ClassCastException

时间:2014-07-10 19:14:48

标签: android classcastexception telephonymanager

在我的代码中,我从Android中的telephonyManager获得连接类型,即LTE,CDMA或HSPA等,然后相应地投射它。示例如下所示。

    switch(getCellInfoType()) {
        case CELL_INFO_TYPE_LTE:
             (CellInfoLte) ...
        case CELL_INFO_TYPE_CDMA:
             (CellInfoCdma) ...

在接收非常糟糕的地区,手机在LTE和3G之间不断跳跃,我得到了ClassCastException。这是因为一旦我从telephonyManager获得连接类型然后尝试强制转换它(此时它会翻转),我得到异常,因为它不再是同一个实例。

例如,我在进入交换机模块之前获得了LTE类型,之后它降至3G。由于我将变量设置为LTE类型,我尝试将其转换为LTE,然后抛出ClassCastException。我的解决方案只是在这种情况下捕获异常并继续(必须将此调用丢弃为有缺陷)。这是处理这个问题最干净的方法,还是可以完全避免这种情况?

1 个答案:

答案 0 :(得分:1)

获取CellInfo结构,然后使用instanceof来决定处理它的方式。

CellInfo info = getCellInfo();

if(info instanceof CellInfoLte){

}
else if (info instanceof CellInfoCdma){

}