Android:为什么获得相邻小区信号强度的方法比当前小区信号强度更好?

时间:2010-01-06 07:45:16

标签: android rssi

我正在编写一个收集细胞信号强度的android应用程序。我无法获得“当前”小区信号强度,但我没有任何问题获得“相邻”小区信号强度。

为了获得当前的单元信号强度,我创建了一个PhoneStateListener并实现了onSignalStrengthChanged回调。它有效,但不是很好。似乎信号强度几乎没有变化,分辨率只会跳到几个数字。我会接受信号强度硬件的分辨率很粗的答案,但是当我使用TelephonyManager的getNeighboringCellInfo()方法时,它的效果要好得多。来自相邻小区的信号强度读数经常变化,并且它们具有更好的分辨率。

那么,我如何以与获得相邻细胞强度相同的方式获得当前细胞信号强度?对我来说,相邻单元的功能优于当前单元似乎很奇怪。我在这里错过了什么吗?

如果可能的话,我还想直接从电话管理器调用一个方法来获取当前的单元格强度,而不是监听器。如果有人知道如何,请告诉我。感谢。

2 个答案:

答案 0 :(得分:8)

基于Android 1.5源(BatteryStatsImpl.java)仅在以下状态之间信号发生变化时才会发送通知:

SIGNAL_STRENGTH_NONE_OR_UNKNOWN (99)
SIGNAL_STRENGTH_GREAT (16-32)
SIGNAL_STRENGTH_GOOD (8-15)
SIGNAL_STRENGTH_MODERATE (4-7)
SIGNAL_STRENGTH_POOR (0-3)

因此,在您的情况下,信号强度会在相同范围内发生变化而您不会收到通知。

我想这样做是为了节省电池寿命。

答案 1 :(得分:1)

我觉得这个方法工作得不好,因为在javadoc中写道,自{api 2.0}以来,onSignalStrengthChanged()被弃用,被onSignalStrengthsChanged()取代(注意“s”),但不幸的是这个方法是私人的!

有一个open issue,似乎google已经删除了这个方法的原因(可能是因为你注意到它不能正常工作),并且它将在下一个sdk版本中提供。< / p>

您必须耐心等待并投票here以加快开发过程!