如何根据 RSSI 对 BLE 设备进行分类?

How to sort BLE devices based on their RSSI?

我能够扫描 ble 设备并显示它们。我也得到了他们的 RSSI 值。但我需要在回收站视图中按信号强度(从最强到最弱)对这些设备进行排序,并在每个扫描的设备旁边显示不同的信号符号。知道如何实现吗?

案件编号(1、2、3、4、5)用什么代替?

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    final ScannedDevice device = list.get(position);

    holder.firmwareTv.setText(device.getFirmwareName());
    holder.macTv.setText(device.getMacId());

    int value = device.getRssi();

    switch (value){
        case 1:
            holder.signalIv.setImageResource(R.drawable.ic_signal_full);
            break;
        case 2:
            holder.signalIv.setImageResource(R.drawable.ic_signal_almost_full);
            break;
        case 3:
            holder.signalIv.setImageResource(R.drawable.ic_signal_half);
            break;
        case 4:
            holder.signalIv.setImageResource(R.drawable.ic_signal_first);
            break;
        case 5:
            holder.signalIv.setImageResource(R.drawable.ic_signal_null);
            break;

    }

我假设具有更强信号强度的设备 RSSI 具有更大的 int 数字。因此,您可以对您在适配器中提供的列表进行排序。

您可以在控制器内创建适配器之前执行此操作。例如

YourAdapter adapter = new YourAdapter(yourList);

您可以使用 Java 8 :

这样的过滤器对列表进行排序
sortedBLEDevices = 
yourList.stream()
        .sorted(Comparator.comparing(ScannedDevice::getRssi)) // sort by Rssi
        .collect(Collectors.toList());