在移动电话上测量“真实”的手机信号强度

6
我希望能编程测量移动电话中的信号强度,不关心手机或编程环境:它可以基于Android、Windows Mobile 或甚至是 J2ME,并且可以来自任何制造商(请勿使用iPhone)。然而,需要使用真正的商业手机,而非专门的测量设备。
这个问题并不像第一眼看起来那么容易。我知道已经存在许多声称返回手机信号强度的方法。其中一些示例包括:
- WM6 中的 SystemState.PhoneSignalStrength - WinCe 中的 RIL_GetCellTowerInfo (返回的 RILCELLTOWERINFO 结构体的 dwRxLevel 成员) - Android 中的 android.telephony.NeighboringCellInfo.getRssi()
上述方法的问题在于它们只返回几个(少于10个)离散值,例如 SystemState.PhoneSignalStrength 只能转换为 -100 dbm、-90 dbm、-80 dbm、-70 dbm 和 -60 dbm 等少数数值,这对于我的应用程序并不有用,因为我想要尽可能精确的值。
如果有一种未公开的解决方案只适用于某一款手机,也没关系,只要你能告诉我一种方法,我将不胜感激。
谢谢您!
4个回答

3
请查看关于Java ME的JSR-256 Mobile Sensor API。诺基亚S60 5版设备支持此API。您可以使用此API检查网络信号强度。但最好先从诺基亚论坛询问其粒度。

我知道SensorInfo[] signalInfo = SensorManager.findSensors("network_field_intensity", null);这个命令,但是我认为在Android或Windows Mobile不支持的东西在更受限制的J2ME环境中也不会被支持。不过,我会尝试找到更多关于这方面的信息... - Serafeim
三星和索尼爱立信也有搭载S60第5版和JSR-256的手机。 - michael aubert
我认为你会发现大多数JSR-256实现中都存在相同的测量值限制。最新的Sony Ericsson功能手机也支持将网络场强作为JSR-256传感器。 - Ola

2
这是我找到的一个解决方案,适用于仍在寻找答案的人:

一些Windows Mobile HTC手机有一个名为fieldtest.exe的程序,其中包含我需要的信息(可能其他手机也有这个程序,我只测试过特定的HTC手机,但从在谷歌上的搜索中了解到,大多数HTC WM手机都有它)。Fieldtest程序不仅具有电话的确切信号强度,而且还有许多其他非常有用的电信信息,否则无法访问。

唯一的问题是如何在您的过程中使用该程序的数据,因为所有值都存储在ListView中。

好吧,那就是我之前发布的另一个问题的重点。

所以,解决方案是运行fieldtest程序并从中提取/窃取所需的值!


2

这看起来很有趣 - 但从我所看到的来看,它仅支持Android OS 2.1及更高版本。我没有这样的手机,所以现在无法测试,但是有人能回答关于粒度的问题吗?在特定手机上,这个函数会返回多少个离散值? - Serafeim

1
在WindowsCE平台上可能会很困难。我最后使用的平台使用了一款西门子调制解调器,我可以直接访问并获取他们自己的信息。然而,自从他们的最新固件更新后,他们现在关闭了这个功能,并强制我通过RIL进行访问。
我猜你可能需要找到一个特定的单元和特定的调制解调器。但是我不知道有没有特别的推荐。抱歉。 :(

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