2016-10-18 86 views
0

我試圖通過https://github.com/davidgyoung/ble-advert-counter/blob/master/app/src/main/java/com/radiusnetworks/blepacketcounter/MainActivity.java 來使用代碼掃描並讀取BLE設備的廣告數據。在android logcat中讀取格式化的BLE廣告數據,但無法調用它

該代碼運行良好。如圖所示,我可以通過LogCat獲取格式化的廣告數據。

enter image description here

但在代碼中,我無法找到相關的日誌語句。

我沒有看到BluetoothLeScanner類或調用onScanResult()方法。

我想獲取字符串「ScanResult {mDevice = F3:E5:7F:73:4F:81,mScanRecord = ScanRecord ...」來獲取格式化的數據值。

我該如何做到這一點?

謝謝

回答

0

我不確定日誌,但這裏是如何獲取數據。

onLeScan()回調具有打印在日誌中的所有信息。要獲取設備信息,您可以使用回撥中的設備對象(例如device.getAddress())。掃描記錄將位於回調的scanRecord字節數組中。您需要解析數組以獲取信息。我用下面的代碼來解析掃描信息。

public WeakHashMap<Integer, String> ParseRecord(byte[] scanRecord) { 
    WeakHashMap<Integer, String> ret = new WeakHashMap<>(); 
    int index = 0; 
    while (index < scanRecord.length) { 
     int length = scanRecord[index++]; 
     //Zero value indicates that we are done with the record now 
     if (length == 0) break; 

     int type = scanRecord[index]; 
     //if the type is zero, then we are pass the significant section of the data, 
     // and we are thud done 
     if (type == 0) break; 

     byte[] data = Arrays.copyOfRange(scanRecord, index + 1, index + length); 
     if (data != null && data.length > 0) { 
      StringBuilder hex = new StringBuilder(data.length * 2); 
      // the data appears to be there backwards 
      for (int bb = data.length - 1; bb >= 0; bb--) { 
       hex.append(String.format("%02X", data[bb])); 
      } 
      ret.put(type, hex.toString()); 
     } 
     index += length; 
    } 

    return ret; 
} 

請參考下面的鏈接瞭解ble ble的廣告。

BLE obtain uuid encoded in advertising packet

希望這有助於。

+0

感謝您的幫助。處理scanRecord字節數組是有意義的。 – stev90098289dev

+0

感謝您的幫助。處理scanRecord字節數組是有意義的。但是,從LogCat中看來,BluetoothLeScanner類或onScanResult()方法已經使用scanRecord字節數組處理並輸出標籤良好的字符串,包括可讀的MANUFACTURING DATA和其他數據信息。如果我可以使用LogCat中的這個字符串,它會很方便。 – stev90098289dev