在我的代码中,我从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。我的解决方案只是在这种情况下捕获异常并继续(必须将此调用丢弃为有缺陷)。这是处理这个问题最干净的方法,还是可以完全避免这种情况?
答案 0 :(得分:1)
获取CellInfo结构,然后使用instanceof来决定处理它的方式。
CellInfo info = getCellInfo();
if(info instanceof CellInfoLte){
}
else if (info instanceof CellInfoCdma){
}