5

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

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

那么,如何以与获取相邻小区强度相同的方式获取当前小区信号强度?对我来说,相邻单元格的功能比当前单元格更好,这似乎很奇怪。我在这里错过了什么吗?

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

4

2 回答 2

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)

因此,在您的情况下,信号强度会在同一范围内变化,并且您不会收到通知。

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

于 2010-09-15T18:36:23.417 回答
1

我认为这种方法效果不佳,因为正如 javadoc 中所写,onSignalStrengthChanged()自 api 2.0 起已弃用,并由onSignalStrengthsChanged()(注意“s”)取代,但不幸的是,这种方法是私有的!

有一个未解决的问题,似乎 google 已出于未知原因删除了该方法(可能是因为它没有像您注意到的那样运行良好),并且它将在下一个 sdk 版本中可用。

您只需要耐心等待并在这里投票以加快开发过程!

于 2010-01-06T09:59:01.550 回答