如何根据 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());
我能够扫描 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());