1

Я пытаюсь сканировать BLE устройства сСканирование BLE устройство не работает

mBluetoothAdapter.startLeScan(this); 

(я знаю его устаревшим для новых версий, но только, чтобы видеть, что это работает с телефоном [4.4], я использую его). Поэтому он начинает сканирование и затем переходит без ошибок, но устройство не обнаружено. Событие OnLEScan также запускается, но параметр устройства в нем равен NULL. Мое устройство LE находится прямо там и подключено.

В googling я обнаружил, что это происходит, если у BluetoothAdapter нет UUID. Как установить UUID? Когда OnLeScan вызывается/запускается? Есть ли другое решение?

Мой код обратного вызова идет здесь

//BluetoothAdapte.LEScanCallBack on MainActivity 
@Override 
public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord){ 
    Log.i(TAG, "New LE Device: " + device.getName() + "@" + rssi); 
    if(Device_Name.equals(device.getName())){ 
      mDevices.put(device.hashCode(), device); 
      invalidateOptionsMenu(); 
     } 
} 

ответ

0

Anroid 4.4 не совместим, я использовал андроида 5.1 Устройство и он работал как шарм!

0
  • Используйте этот код, как это обеспечит вам представление всех данных имеющихся в вашем BLE устройства (будет отображать данные в журналах).
  • UUIDs в основном предоставляется производителем устройства, и вы не можете установить его самостоятельно.
  • Для экземпляра: Я использовал BLE Beacons, и его производитель предоставил мне API, который помог мне получить его UUID.
  • Иногда на самом устройстве имеется специальный идентификатор (идентификатор фабрики в моем случае), который может помочь вам получить ваш UUID, а также с сайта производителя или API.

    BluetoothAdapter bluetoothAdapter; 
    BluetoothLeScanner bluetoothLeScanner; 
    
    
    
    bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
    bluetoothLeScanner = bluetoothAdapter.getBluetoothLeScanner(); 
    
    
    
        bluetoothLeScanner.startScan(new ScanCallback() { 
         @Override 
         public void onScanResult(int callbackType, ScanResult result) { 
          super.onScanResult(callbackType, result); 
    
          String s = "\nRssi : "+result.getRssi()+"" + 
            "\nName (Get Device) : "+result.getDevice().getName()+"" + 
            "\nBytes"+result.getScanRecord().getBytes()+"" + 
            "\nGet Device : " + result.getDevice()+"" + 
            "\nAddress : "+result.getDevice().getAddress()+"" + 
            "\nService UUIds : "+result.getScanRecord().getServiceUuids().get(0)+"" +  //Unique 
            "\nName (Scan Record) : "+result.getScanRecord().getDeviceName()+"" + 
            "\nUuids device : "+result.getDevice().getUuids()+"" + 
            "\nDescribe contents : "+result.describeContents(); 
    
          //This will show you all the data in logs. 
          Log.e("All Data",s); 
    
    
    
         } 
    
         @Override 
         public void onBatchScanResults(List<ScanResult> results) { 
          super.onBatchScanResults(results); 
         } 
    
         @Override 
         public void onScanFailed(int errorCode) { 
          super.onScanFailed(errorCode); 
         } 
        }); 
    
    } 
    
+0

Спасибо! кажется правильным ответом только на то, что я получаю ошибку: поиск метода не удалось для селектора «getBluetoothLeScanner» с подписью «() Landroid/bluetooth/le/BluetoothLeScanner;» \t когда я это делаю -> mBluetoothLeScanner = mBluetoothAdapter.getBluetoothLeScanner(); – Samra

+0

Моя версия java-компилятора 1,7 (если это имеет значение) – Samra

+0

Возможно, эта ошибка возникает, потому что ** API-интерфейс BluetoothLeScanner ** был добавлен в API 21 (Android 5.0). Итак, попробуйте установить 'minSdkVersion 21'. –