android - 与 Wifi Direct 的 p2p 连接中的信号强度?

标签 android rssi wifi-direct

我正在看 Android 的 WifiDirect 演示,想知道是否可以在两个连接的设备之间获取 RSSI 或信号强度等信息。

抱歉,如果这个问题没有意义,我知道可以从接入点获取 RSSI,但我想知道的是 RSSI 的概念是否存在于 Wifi Direct 设备之间的 p2p 连接中。

感谢您的宝贵时间。

最佳答案

Note: This answer was true for the API level 14, I don't know if it still applies to the latest Android versions.

Android 代码源中存在名为 WifiP2pPeer 的非文档化文件。它包含一些“有趣”的行。

我们可以看到 RSSI 值是硬编码的 (mRssi = 60;//TODO: fix),因此该功能可能尚未实现...(与 Android 14 中的其他功能一样)关于 WifiP2p)。

public class WifiP2pPeer extends Preference {

    private static final int[] STATE_SECURED = {R.attr.state_encrypted};
    public WifiP2pDevice device;

    private int mRssi;
    private ImageView mSignal;

    private static final int SIGNAL_LEVELS = 4;

    public WifiP2pPeer(Context context, WifiP2pDevice dev) {
        super(context);
        device = dev;
        setWidgetLayoutResource(R.layout.preference_widget_wifi_signal);
        mRssi = 60; //TODO: fix
    }

    @Override
    protected void onBindView(View view) {
        if (TextUtils.isEmpty(device.deviceName)) {
            setTitle(device.deviceAddress);
        } else {
            setTitle(device.deviceName);
        }
        mSignal = (ImageView) view.findViewById(R.id.signal);
        if (mRssi == Integer.MAX_VALUE) {
            mSignal.setImageDrawable(null);
        } else {
            mSignal.setImageResource(R.drawable.wifi_signal);
            mSignal.setImageState(STATE_SECURED,  true);
        }
        refresh();
        super.onBindView(view);
    }

    @Override
    public int compareTo(Preference preference) {
        if (!(preference instanceof WifiP2pPeer)) {
            return 1;
        }
        WifiP2pPeer other = (WifiP2pPeer) preference;

        // devices go in the order of the status
        if (device.status != other.device.status) {
            return device.status < other.device.status ? -1 : 1;
        }

        // Sort by name/address
        if (device.deviceName != null) {
            return device.deviceName.compareToIgnoreCase(other.device.deviceName);
        }

        return device.deviceAddress.compareToIgnoreCase(other.device.deviceAddress);
    }

    int getLevel() {
        if (mRssi == Integer.MAX_VALUE) {
            return -1;
        }
        return WifiManager.calculateSignalLevel(mRssi, SIGNAL_LEVELS);
    }

    private void refresh() {
        if (mSignal == null) {
            return;
        }
        Context context = getContext();
        mSignal.setImageLevel(getLevel());
        String[] statusArray = context.getResources().getStringArray(R.array.wifi_p2p_status);
        setSummary(statusArray[device.status]);
    }
}

关于android - 与 Wifi Direct 的 p2p 连接中的信号强度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10603309/

相关文章:

php - JSON 类无法处理阿拉伯语单词

java - 如何在 Android/Java 中循环显示背景颜色?

android - 如何在 Android 中获取手机服务信号强度?

java - 关闭应用程序时如何断开与设备的连接?

java - slider 在表格中始终具有默认宽度

java - 套接字未接收到任何数据

android - 如何获取我正在为 RSSI 读取的 BLE 设备的地址?

android - 蓝牙RSSI最大值或最小值

Android Wi-Fi Direct 在连接前发送数据

esp32 - 为 ESP32 实现 Wi-Fi Direct