0

Я внедрил широковещательный приемник в Android для прослушивания всех доступных сигналов Bluetooth. Приемник работает, но отображает только четыре устройства. Когда я вручную просматриваю устройства в меню Android, я неожиданно вижу восемь разных устройств в своем приложении.Результаты сканирования Bluetooth увеличиваются с помощью ручного сканирования в Android

Как я могу просмотреть все доступные устройства без ручного сканирования?

Код:

private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     String action = intent.getAction(); 
     // When discovery finds a device 
     if (BluetoothDevice.ACTION_FOUND.equals(action)) { 

      // Get the BluetoothDevice object from the Intent 
      BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 

      // Add the name and address to an array adapter to show in a ListView 
      int rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI,Short.MIN_VALUE); 
      Log.d("bluetoothSignal", "name: "+ device.getName() + " adress: "+ device.getAddress() + "strength: "+ rssi + " Data: " + intent.getData()); 
      mArrayAdapter.add(device.getName() + "\n" + device.getAddress()); 
     } 

    } 

}; 
+0

Я использую тот же BroadcastReceiver, и он работает для меня, он показывает все устройства в области. Убедитесь, что ваше устройство не спарено во время запуска этого кода, поскольку это снижает пропускную способность. – B1nd0

+0

Я понимаю, что это связано с устройствами с низким энергопотреблением Bluetooth, которые я не могу автоматически получать с помощью этого ресивера. Я очень уверен, что не подключен ни к одному из устройств, которые я просматриваю. – DigiDude

ответ

0

Следует помнить, что при сканировании «Android меню» Результаты могут показать парные устройства, а также отсканированные устройства. Таким образом, это может объяснить дубликаты. Этот случай, однако, не очень вероятен, потому что любые хорошие результаты сканирования Bluetooth должны предотвращать дублирование результатов, но могут быть особые случаи, когда дубликаты могут быть разрешены.

Я подозреваю, что на самом деле происходит то, что системные настройки возвращают традиционные устройства Bluetooth (с использованием rfcomm) и устройства Bluetooth LE. Проблема в том, что большинство меню устройств Bluetooth не показывают идентификатор, указывающий, традиционно ли устройство или устройство Bluetooth LE, просто имя устройства. Кроме того, при использовании BluetoothAdapter.startDiscovery() он предпочитает традиционные Bluetooth-устройства и только изредка возвращает устройства Bluetooth LE. Например, по моему опыту, в 85% случаев он не обнаруживает устройства Bluetooth LE за время, необходимое для завершения процесса обнаружения, 13 секунд. Я рекомендую использовать как традиционный механизм сканирования, так и механизм сканирования Bluetooth LE. Чтобы выполнить сканирование Bluetooth LE, обратитесь к BluetoothLeScanner, позвоните по телефону BluetoothAdapter.getBluetoothLeScanner(). Когда у вас есть ссылка, звоните BluetoothLeScanner.startScan(ScanCallback callback). ScanCallback будет запущен с обнаруженными устройствами Bluetooth LE, которые вы можете добавить в адаптер ListView. Попробуйте это и посмотрите, получаете ли вы аналогичные результаты с «меню Android».

Смежные вопросы