在android中获得信号强度时的ClassCastException

在android中获得信号强度时的ClassCastException,android,classcastexception,telephonymanager,Android,Classcastexception,Telephonymanager,在我的代码中,我从Android中的telephonyManager获取连接类型,即LTE、CDMA或HSPA等,然后相应地强制转换它。下面是一个例子 switch(getCellInfoType()) { case CELL_INFO_TYPE_LTE: (CellInfoLte) ... case CELL_INFO_TYPE_CDMA: (CellInfoCdma) ... 在一个接收效果非常差的

在我的代码中,我从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,然后LTE将抛出ClassCastException。我的解决方案就是在这种情况下捕获异常并继续(本质上是将此调用视为错误而丢弃)。这是处理这个问题的最干净的方法,还是可以完全避免

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

CellInfo info = getCellInfo();

if(info instanceof CellInfoLte){

}
else if (info instanceof CellInfoCdma){

}

因此,本质上,我不应该将其存储在变量中,而是应该每次尝试查看它是否是LTE、HSPA等的实例,然后相应地继续?啊,是的。谢谢我不知道为什么我以前没有想到这一点。因为这不是你不应该做的事情。谷歌应该为此提供1个原子api,但他们没有,这是一个糟糕的设计。幸运的是我们可以解决这个问题