如何使用 android SDK 计算我的 wifi 和 3g 的信号强度?

How can I calculate the signal strength of my wifi and 3g using android SDK?

我尝试制作一个应用程序来计算我的 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 使用相同的功能吗?如何使用?

请在 Android SDK 的官方文档中找到此信息: Android SDK API documentation, SignalStrength.

有了这个class你就有了方法

int getCdmaDbm()

Get the CDMA RSSI value in dBm

或:

int getEvdoDbm()

Get the EVDO RSSI value in dBm

作为替代方案,您可以查看自 API 级别 1 以来受支持的 TelephonyManager class。有了它,您就可以找出网络状态(public int getNetworkType ()) 您的移动设备目前处于 (2G, 3G,...) 并因此找到或至少转换为相应的 "frequency".

希望这对您计算距离有所帮助。