gpt4 book ai didi

android - 一些 GSM 设备在 Android 上因 CDMA SignalStrength 错误而崩溃

转载 作者:行者123 更新时间:2023-11-29 14:52:17 25 4
gpt4 key购买 nike

我的 Android 应用监控手机信号强度。在 CDMA 设备上,它可以毫无问题地工作。在许多 GSM 设备上,它可以毫无问题地工作。但是,在某些 GSM 设备上,我会强制关闭并显示以下错误消息:

java.lang.ClassCastException: android.telephony.cdma.CdmaCellLocation 无法转换为 android.telephony.gsm.GsmCellLocation

我相当确定在美国的某些三星设备上接收到 4G LTE 信号时会出现此问题;我相信它也发生在其他设备和国家/地区。我仍在尝试确定所涉及的确切服务提供商和设备。

这是来自 MyService.java 的相关代码 fragment ;我用 //******** 标记了错误消息引用的行:

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(); //********
...
}

如果此代码仅应在 isGSM 返回 true 时触发,则不确定为什么会出现来自 android.telephony.cdma 的任何内容。也许当检测到 LTE 信号时,就 Android API 而言,手机会处于某种双 CDMA/GSM 模式?我无法找到任何类似行为的文档。我该如何在我的代码中处理这个问题?谢谢。

最佳答案

我无法解释为什么会这样。我有一些理论,但你有类似的理论。

在理清原因的同时,才能务实地处理问题。您知道有时即使您在回调中获得 GSM SignalStrength,有时在某些设备上您从 TelephonyManager 获得 CDMA CellLocation 并写入您的代码使用 instanceOf 而不是依赖 SignalStrength 中的 .isGSM() 来处理这种情况。

CellLocation cellLoc = tm.getCellLocation();
if(cellLoc instanceof GsmCellLocation) {
GCellLoc = (GsmCellLocation) cellLoc;
// do work
}

关于android - 一些 GSM 设备在 Android 上因 CDMA SignalStrength 错误而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14484599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com