OnBatchScanResults не вызывается в Android BLE

Теперь я использую новый BLE api для разработки Android.

Основная идея заключается в использовании результата сканирования Bluetooth для раздувания recyclerview (списка);

Я следовал руководству BLE по разработчику google

Теперь у меня две проблемы: 1. onBatchScanResults прослушиватель никогда не запускается, но onScanResult работает хорошо, это потому, что сканер только чувствует 1 датчик поблизости?

  1. Мой сканер BLE намного медленнее по сравнению с другими приложениями.

Ниже приведен фрагмент кода двух основных функций.

 private void scanBLE(boolean enable) { final BluetoothLeScanner mBluetoothLeScanner = mBluetoothAdapter.getBluetoothLeScanner(); if (enable) { mScanning = true; mBluetoothLeScanner.startScan(mScanCallback); } else { if (mScanning) { mScanning = false; mBluetoothLeScanner.stopScan(mScanCallback); } } Log.i(TAG, "now the scanning state is" + mScanning); } // Device scan callback. private ScanCallback mScanCallback = new ScanCallback() { public void onScanResult(int callbackType, android.bluetooth.le.ScanResult result) { addBeaconTolist(result, beaconsList); mAdapter.notifyDataSetChanged(); }; public void onScanFailed(int errorCode) { Log.i(TAG, "error code is:" + errorCode); }; public void onBatchScanResults(java.util.List<android.bluetooth.le.ScanResult> results) { Log.i(TAG, "event linstener is called!!!!"); Log.i(TAG, "batch result are:" + results); beaconsList.clear(); for (int i = 0; i < results.size(); i++) { ScanResult result = results.get(i); addBeaconTolist(result, beaconsList); } mAdapter.notifyDataSetChanged(); }; }; 

В MainFragment выглядит следующим образом:

  beaconsList = new ArrayList<BeaconsInfo>(); mAdapter = new BeaconsAdapter(beaconsList); mRecyclerView.setAdapter(mAdapter); scannBLE(true); 

Solutions Collecting From Web of "OnBatchScanResults не вызывается в Android BLE"

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

  1. Чтобы получить пакетные результаты, вам необходимо настроить ScanSettings . Ознакомьтесь с документацией для ScanSettings.Builder и попробуйте использовать SCAN_MODE_LOW_POWER , который SCAN_MODE_LOW_POWER результаты. Вы также можете попробовать отрегулировать интервал между setReportDelay(long reportDelayMillis) с помощью setReportDelay(long reportDelayMillis) ; Вы можете увидеть сообщение в блоге, которое я написал о преимуществах питания этих настроек здесь.

  2. Не совсем понятно, что вы подразумеваете под «мой сканер BLE намного медленнее по сравнению с другими приложениями», но может случиться так, что пользовательский интерфейс приложения отстает, потому что вы не обновляете его в потоке пользовательского интерфейса. Попробуйте обменивать ваши вызовы на notifyDatasetChanged следующим образом:

     runOnUiThread(new Runnable() { @Override public void run() { mAdapter.notifyDataSetChanged(); } });