【发布时间】:2011-11-15 19:18:52
【问题描述】:
我们有一个内部 Android 应用程序,它是对现有 JME 应用程序的迁移。存在一个问题,现场用户抱怨应用程序在信号强度低时尝试发送数据时耗尽了设备电池(这是移动设备中的常见行为,而不是我们的直接问题)
数据需要及时发送,但不是立即发送,因此我们在发送数据之前检查了信号强度。此检查使用了 PhoneStateListener 和 onSignalStrengthsChanged(SignalStrength signalStrength) 回调,正如其他许多类似的 SO 问题和文章所推荐的那样。
这在我自己的手机(在澳大利亚 Telstra 上运行)上运行良好,SignalStrength.getGsmSignalStrength() 按预期返回来自0-31 的值。然而,在另一个网络(Optus Australia)上运行的手机上,它报告 GSM 为真,但在确定信号强度时返回 99(即错误代码)。我相信这仍然是正确的行为,因为 GSM 是 2G 数据,而应该检查的是 3G UMTS/HSPA。 UMTS/HSPA是手机上Elixir应用上报的网络,和预期的一样。我们也有未经证实的报告称,我的网络(Telstra Australia)报告 GSM 强度不足,无法从应用程序发送数据,但能够毫无问题地浏览互联网和执行其他数据活动。这让我相信无论如何检查 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
总结:
- Telstra 连接报告 GSM 为真并返回可用信号强度
- Optus 连接报告 GSM 为真,但始终报告“99”
- GSM 无论如何可能是错误的检查,我们需要尝试获取'实际数据传输网络强度'
【问题讨论】: