Android BLE сканирует и показывает результат - PullRequest
0 голосов
/ 21 октября 2019

Я разрабатываю приложение для Android, которое необходимо подключить к устройству с низким энергопотреблением Bluetooth. Для достижения этой цели и следуя странице Android Dev , я включил правильные разрешения в файл манифеста. В основной деятельности я пытаюсь сканировать устройства BLE и выводить результат на экран. Код выглядит следующим образом:

     final BluetoothLeScanner bluetoothLeScanner = bluetoothAdapter.getBluetoothLeScanner();
     bluetoothLeScanner.startScan(callback);
     // Before 5 seconds, stop the scan and show results.
     new Handler().postDelayed(new Runnable() {
         @Override
         public void run() {
             bluetoothLeScanner.stopScan(callback);
             callback.onBatchScanResults(results);
             callback.onScanFailed(2);
             callback.onScanResult(3,result);
             listOfResults.setText(results.toString());
         }
     },5000);
  • Где:
    • bluetoothApater - это BlueoothAdapter, необходимый для выполнения операции, как сказано на странице android ,
    • bluetoothLeScanner - это объект, необходимый для выполнения операций сканирования LE,
    • callback - это объект обратного вызова Scan,
    • results - это список
    • result - это ScanResult,
    • и listOfResults - текстовое представление.
  • Возможно, проблема в используемом методе, потому чтосогласно официальной странице Android , мы находим три пустоты для выполнения с обратным вызовом (onBatchScanResult, onScanResult и onScanFailed), но я работаю только с BatchScanResult.
  • Почему не отображается устройство? Единственное, что напечатано, это название действия, название пакета и название приложения.

1 Ответ

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

То, как я это сделал, было реализовать объект scanCallback () и переопределить onScanResult () или onBatchScanResults () по мере необходимости.

    private ScanCallback callback= new ScanCallback() {
        @Override
        public void onScanResult(int callbackType, ScanResult result) {
            super.onScanResult(callbackType, result);

            // handles scan result
        }

        @Override
        public void onBatchScanResults(List<ScanResult> results) {
            super.onBatchScanResults(results);

            // handles batch scan results
            for (ScanResult result : results) {

                // you can iterate through each result like so
            }
        }

        @Override
        public void onScanFailed(int errorCode) {
            super.onScanFailed(errorCode);
            // handles error
        }
    };

Затем вы передаете callback внутри stopScan() и startScan()

bluetoothLeScanner.startScan(callback);
bluetoothLeScanner.stopScan(callback);

Также рассмотрите возможность использования result.getDevice(), чтобы вы могли получить конкретные данные устройства, которое вынужно вместо большого куска информации. Например, result.getDevice().getAddress(), если вы хотите только адрес.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...