我的 Android 应用程序监控蜂窝信号强度。在 CDMA 设备上,它可以正常工作。在许多GSM 设备上,它可以正常工作。但是,在某些GSM 设备上,我会强制关闭并显示以下错误消息:
java.lang.ClassCastException: android.telephony.cdma.CdmaCellLocation 不能转换为 android.telephony.gsm.GsmCellLocation
我相当肯定美国的某些三星设备在接收到 4G LTE 信号时会出现此问题;我相信它也会发生在其他设备和国家。我仍在尝试确定所涉及的确切服务提供商和设备。
这是来自 MyService.java 的相关代码片段;我已将错误消息引用的行标记为//********
:
public void onCreate() {
tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
...
}
public int onStartCommand(Intent in, int flags, int startId) {
signalStrengthListener = new SignalStrengthListener();
((TelephonyManager)getSystemService(TELEPHONY_SERVICE)).listen(signalStrengthListener, SignalStrengthListener.LISTEN_SIGNAL_STRENGTHS | SignalStrengthListener.LISTEN_SERVICE_STATE | SignalStrengthListener.LISTEN_DATA_CONNECTION_STATE | SignalStrengthListener.LISTEN_CELL_LOCATION);
return START_STICKY;
...
}
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
isGSM = signalStrength.isGsm();
if (isGSM == true) {
GCellLoc = (GsmCellLocation)tm.getCellLocation(); //********
...
}
android.telephony.cdma
如果仅在isGSM
返回 true时触发此代码,则不确定为什么会出现任何内容。也许当检测到 LTE 信号时,就 Android API 而言,这会使手机处于某种双 CDMA/GSM 模式?我无法找到任何类似行为的文档。如何在我的代码中处理这个问题?谢谢。