我们有一个内部 Android 应用程序,它是一个预先存在的 JME 应用程序的迁移。有一个问题,现场用户提示应用程序在信号强度低时尝试发送数据时耗尽了设备电池(这是移动设备中的常见行为,而不是我们的直接问题)
数据需要及时发送,但不是立即发送,因此我们在发送数据之前检查了信号强度。此检查使用了 PhoneStateListener
和 onSignalStrengthsChanged(SignalStrength signalStrength)
回调,正如其他许多类似的 SO 问题和文章所推荐的那样。
这在我自己的手机上运行良好(在 Telstra Australia 上运行)并且 SignalStrength .getGsmSignalStrength() 按预期从 0-31
返回一个值。然而,在另一个网络(澳大利亚 Optus)上运行的电话上,它报告 GSM 为真,但在确定信号强度时返回 99(即错误代码)。我相信这仍然是正确的行为,因为 GSM 是 2G 数据,应该检查 3G UMTS/HSPA。 UMTS/HSPA 是手机上的 Elixir
应用程序报告的网络,正如预期的那样。我们还收到未经证实的报告,称我的网络(澳大利亚电信)报告 GSM 强度不足,无法从应用程序发送数据,但能够正常浏览互联网和执行其他数据 Activity 。这让我相信无论如何检查 GSM 强度都是错误的。
我正在同一网络上的其他 Android 手机上运行测试(仍在尝试访问某些设备),但绝对是这样,我们能够浏览互联网并从我们的应用程序发送 (HTTP) 数据,它只是如果我们检查信号强度并始终收到“99”,则会失败。在 Optus 上,SignalStrength.toString() 在对多个塔进行几天测试后总是返回 99 -1 -1 -1 -1 -1 -1 gsm 3
。
最接近的(未回答的)SO 线程是这个:Getting Signal Strength RSCP and Ec/Io from a phone served by a HSPA network
总结:
最佳答案
在对来自多个供应商和多个(澳大利亚)运营商的多款手机进行测试后,似乎这种行为是三星 Galaxy S2 特有的,在之前的版本(Galaxy S)上没有出现过。
关于android - GSM 返回 '99' 时如何确定信号强度?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7396142/