Android 使用Wifi Direct的p2p连接中的信号强度?

Android 使用Wifi Direct的p2p连接中的信号强度?,android,rssi,wifi-direct,Android,Rssi,Wifi Direct,我正在看一看Android的WifiDirect演示,想知道是否有可能在两个连接的设备之间获得RSSI或信号强度 抱歉,如果这个问题没有意义,我知道可以从接入点获取RSSI,但我想知道的是,在Wifi Direct中设备之间的p2p连接中是否存在RSSI的概念 谢谢你抽出时间 注意:这个答案对于API级别14是正确的,我不知道它是否仍然适用于最新的Android版本 Android代码源中存在一个名为WifiP2pPeer的非文档文件。它包含一些“有趣”的行 我们可以看到RSSI值是硬编码的(m

我正在看一看Android的WifiDirect演示,想知道是否有可能在两个连接的设备之间获得RSSI或信号强度

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

谢谢你抽出时间

注意:这个答案对于API级别14是正确的,我不知道它是否仍然适用于最新的Android版本

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

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

公共类wifip2pper扩展了首选项{
私有静态final int[]STATE_SECURED={R.attr.STATE_encrypted};
公共wifip2p设备;
私人内部mRssi;
私有图像视图mSignal;
专用静态最终int信号_电平=4;
公共wifip2pper(上下文,wifip2p设备开发){
超级(上下文);
设备=dev;
setWidgetLayoutResource(R.layout.preference\u wifi\u wifi\u信号);
mRssi=60;//TODO:修复
}
@凌驾
受保护的void onBindView(视图){
if(TextUtils.isEmpty(device.deviceName)){
setTitle(设备.设备地址);
}否则{
setTitle(设备名称);
}
mSignal=(ImageView)view.findViewById(R.id.signal);
if(mRssi==Integer.MAX_值){
mSignal.setImageDrawable(空);
}否则{
mSignal.setImageResource(R.drawable.wifi_信号);
mSignal.setImageState(STATE_SECURED,true);
}
刷新();
super.onBindView(视图);
}
@凌驾
公共整数比较(首选项){
if(!(wifip2pper的首选实例)){
返回1;
}
WifiP2pPeer other=(WifiP2pPeer)首选项;
//设备按照状态的顺序运行
if(device.status!=其他.device.status){
返回设备状态<其他设备状态?-1:1;
}
//按姓名/地址排序
如果(device.deviceName!=null){
返回device.deviceName.compareTignoreCase(其他.device.deviceName);
}
返回device.deviceAddress.compareTignoreCase(其他.device.deviceAddress);
}
int getLevel(){
if(mRssi==Integer.MAX_值){
返回-1;
}
返回WifiManager。计算信号电平(mRssi、信号电平);
}
私有无效刷新(){
如果(mSignal==null){
返回;
}
Context=getContext();
mSignal.setImageLevel(getLevel());
String[]statusArray=context.getResources().getStringArray(R.array.wifi\u p2p\u status);
setSummary(statusArray[device.status]);
}
}

谢谢Fabien,这肯定很有用。我可以在什么地方在线浏览这个文件吗?或者我必须下载4.0版的回购协议才能查看它吗?这应该有帮助:。但我更喜欢下载它…太好了,我将从SDK管理器下载它,并看一看。非常有用的发现法比恩再次感谢!仅供参考,最新的预览版(Android 5.L预览版)尚未修复此问题。参见5.1.1中的硬编码。
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]);
    }
}