我尝试制作一个应用程序来计算我的wifi或3g的信号强度,并让用户知道他与该接入点的距离。例如,我这里有一个代码示例,它将计算设备和 wifi 接入点之间的距离(以公里为单位):
public double calculateDistance(double signalLevelInDb, double freqInMHz)
{
double exp = (27.55 - (20 * Math.log10(freqInMHz)) + Math.abs(signalLevelInDb)) / 20.0;
return Math.pow(10.0, exp);
}
但是,当我在 Android Studio 中调用该函数时,我不知道如何计算signalLevelInDb
(=dbm) 和freqInMhz
(=mHz),以便我可以将它们发送到函数以显示我的距离。如何让安卓工作室给我这两个值?我可以对3g使用相同的功能吗?
请在 Android SDK 的官方文档中找到此信息:Android SDK API 文档,SignalStrength。
有了这个类,你就有了方法
int getCdmaDbm()
获取以dBm为单位的CDMA RSSI值
或:
int getEvdoDbm()
获取以dBm为单位的EVDO RSSI值
作为替代方案,您可以查看自 API 级别 1 以来支持的 TelephonyManager
类。有了这个,您可以找出您的移动设备当前处于哪种网络状态(,...public int getNetworkType ()
),从而找出或至少转换为相应的"频率"。
希望这对您的距离计算有所帮助。