Как отсортировать устройства BLE по их RSSI? - PullRequest
0 голосов
/ 09 октября 2019

Я могу сканировать все устройства и отображать их. Я также получаю их значения 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;

    }

1 Ответ

0 голосов
/ 09 октября 2019

Я предполагаю, что устройства с более сильным уровнем сигнала RSSI имеют большее число int. Таким образом, вы можете отсортировать список, который вы даете в своем адаптере.

Вы можете сделать это до создания вашего адаптера внутри вашего контроллера. Например,

YourAdapter adapter = new YourAdapter(yourList);

Вы можете отсортировать этот список с помощью фильтров, подобных Java 8:

sortedBLEDevices = 
yourList.stream()
        .sorted(Comparator.comparing(ScannedDevice::getRssi)) // sort by Rssi
        .collect(Collectors.toList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...