Получить строку URL-адреса маяка Eddystone

У меня есть приложение для андроид. Я использую Altbeacon "BeaconParser.EDDYSTONE_URL_LAYOUT" для передачи в качестве маяка. С другой стороны, у меня есть приложение для iOS. Я использую библиотеку BluetoothKit для сканирования этого маяка. Я могу сканировать и видеть значение RSSI моего устройства, но я не могу получить строку URL. Это мой быстрый код;

public class BeaconScanning: NSObject, BKCentralDelegate{

    let central = BKCentral()

    override init(){
        super.init()
        startCentral()
    }
    private func startCentral() {
        central.delegate = self
        do {
            let serviceUUID = CBUUID(string: "0xFEAA")
            let characteristicUUID = CBUUID( )
            let configuration = BKConfiguration(dataServiceUUID: serviceUUID, dataServiceCharacteristicUUID: characteristicUUID)
            try central.startWithConfiguration(configuration)
        } catch let error { }
        scanBeacon()
    }


    public func scanBeacon() {

       central.scanContinuouslyWithChangeHandler({ changes, discoveries in }, stateHandler: { newState in
        }, duration: 3, inBetweenDelay: 0.1, beaconHandler: { beacons in

                for beacon in beacons! {

                  print(beacon.getRunningAverageRssi()) // ı can get it
                  print(beacon.getBluetoothName()) //return null

                  // ı want to get eddystone url.

                }
        }, errorHandler: { error in })
    }

Как я могу получить строку URL для моего устройства Android?


person uyarc    schedule 19.06.2020    source источник


Ответы (1)


BluetoothKit не предоставляет функции для распаковки передач Eddystone-URL. Вы можете попробовать ios-beacon-tools, который:

    scanner = RNLBeaconScanner.shared()
    scanner?.startScanning()
    
    // Execute this code periodically (every second or so) to view the beacons detected

    if let detectedBeacons = scanner?.trackedBeacons() as? [RNLBeacon] {
        for beacon in detectedBeacons {
             if (beacon.beaconTypeCode.intValue == 0x10 && beacon.serviceUuid.intValue == 0xFEAA) {
                // this is eddystone url
                NSLog("Detected EDDYSTONE-URL with %@", RNLURLBeaconCompressor.urlString(fromEddystoneURLIdentifier: beacon.id1))
            }
            else {
                // some other beacon type
            }
        }
    }        
person davidgyoung    schedule 20.06.2020