我尝试制作一个应用程序来计算我的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)所以我可以将它们发送到函数来显示我的距离。我如何让android studio给我这两个值?我可以为3g使用相同的功能吗?
答案 0 :(得分:1)
请在Android SDK的官方文档中找到此信息: Android SDK API documentation, SignalStrength
使用此类,您可以使用方法
int getCdmaDbm()
以dBm
获取CDMA RSSI值
或:
int getEvdoDbm()
以dBm
获取EVDO RSSI值
作为替代方案,您可以查看自API级别1以来支持的TelephonyManager
类。通过此方式,您可以了解移动设备的网络状态(public int getNetworkType ()
)目前(2G,3G,......)因此找出或至少转化为相应的“频率”。
希望这可以帮助您进行距离计算。