安卓手机:为什么获取邻近基站信号强度的方法比获取当前基站信号强度的方法更好?

5
我正在编写一款收集手机信号强度的安卓应用程序。我在获取“当前”信号强度方面遇到了问题,但是我没有任何问题获取“附近”的信号强度。
为了获取当前的信号强度,我创建了一个PhoneStateListener并实现了onSignalStrengthChanged回调函数。它可以工作,但效果不太好。似乎信号强度很少改变,分辨率只跳几个数字。我可以接受信号强度硬件分辨率粗糙的答案,但是当我使用TelephonyManager的getNeighboringCellInfo()方法时,它的效果要好得多。邻居单元的信号强度读数经常变化,而且分辨率更高。
那么,我该如何以与获取邻近单元强度相同的方式获取当前单元的信号强度呢?对我来说,邻近单元的功能比当前单元更好,这似乎有些奇怪。我在这里漏掉了什么吗?
如果可能的话,我还想直接从电信管理器中调用一个方法来获取当前单元的强度,而不是一个监听器。如果有人知道如何做,请告诉我。谢谢。
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)

所以在您的情况下,信号强度在同一范围内变化,您无法收到通知。

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


1

我觉得这个方法不太好用,因为根据javadoc的说明,onSignalStrengthChanged()自从api 2.0以后就已经被弃用了,并且被onSignalStrengthsChanged()(注意有个"s")所取代,但不幸的是这个方法是私有的!

关于这个问题有一个未解决的问题,看起来谷歌已经移除了这个方法,原因不明(可能是因为它并不像你注意到的那样好用),并且将在下一个sdk版本中提供。

那么你只需要耐心等待,并在这里投票以加快开发进程!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接