我们有一个内部的Android应用程序,它是一个现有JME应用程序的迁移。在实际使用中,用户抱怨当信号强度较低时尝试发送数据时,应用程序会耗尽设备电池(这是移动设备的常见行为,而不是我们的直接问题)。需要及时但不立即发送数据,因此我们在发送数据之前检查了信号强度。该检查使用了PhoneStateListener和onSignalStrengthsChanged(SignalStrength signalStrength)回调,这是许多类似SO问题和其他文章推荐的方法。
最接近(未回答的)SO线程是这个:Getting Signal Strength RSCP and Ec/Io from a phone served by a HSPA network 总之:
- Telstra连接报告GSM为真,并返回可用的信号强度。 - Optus连接报告GSM为真,但始终报告“99”。 - GSM可能是要检查的错误内容,我们需要尝试获取“实际数据传输网络强度”。
这在我的手机上很好地运行(运行于Telstra Australia),SignalStrength.getGsmSignalStrength()正常返回0-31的值。然而,在另一个网络(Optus Australia)上运行的手机报告GSM是真实的,但在确定信号强度时返回99(即错误代码)。我认为这仍然是正确的行为,因为GSM是2G数据,应该检查3G UMTS/HSPA 。UMTS/HSPA是手机上的Elixir应用程序报告的网络,如预期所示。我们还收到了未经确认的报告,即我的网络(Telstra Australia)报告GSM信号强度不足以发送应用程序中的数据,但可以浏览互联网和执行其他数据活动而没有问题。这使我相信检查GSM强度是错误的事情。
我正在对同一网络上的其他安卓手机进行测试(仍在尝试访问某些设备),但无论如何,我们都能够浏览互联网并从我们的应用程序发送(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可能是要检查的错误内容,我们需要尝试获取“实际数据传输网络强度”。