iOS CLLocationManager не обнаруживает Android Библиотека маяков Сигнал iBeacon отправлен от Android - PullRequest
1 голос
/ 09 июля 2020

Назначение приложения

  1. Передача сигнала маяка от iOS и обнаружение этого сигнала на Android и iOS устройствах.
  2. Передача сигнала маяка от Android и обнаружить этот сигнал на Android и iOS устройствах.

Technologies

Android: Android Beacon Library.

  • AltBeacon сигнал, отправленный и полученный между Android устройствами (для большей точности)
  • сигнал iBeacon, отправленный с iOS и полученный Android
  • сигнал iBeacon, отправленный от Android и получено iOS (не работает)

iOS: CoreLocation CLLocationManager iBeacon.

  • Сигнал iBeacon отправлен с iOS и получен iOS
  • Сигнал iBeacon отправлен из iOS и получен Android
  • Сигнал iBeacon отправлен из Android и получен iOS (Не Работает)

Проблема

  • Использование одного и того же UUID на обеих платформах при передаче сигнала iBeacon из iOS он обнаружен на другом iOS устройстве с использованием метода делегата CLLocationManager
    locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion)

Использование того же UUID для передачи сигнала iBeacon от Android с использованием Android Библиотека маяков, маяк не обнаруживается указанным выше методом делегата CLLocationManager на iOS.

Код

  • Чтобы увеличить вероятность обнаружения, я удалил требование для основных и второстепенных значений на стороне iOS, чтобы предотвратить возможность iOS фильтрации сигнала маяка из-за несоответствия основных и второстепенных значений.
  • Да, я попытался добавить основные и второстепенные значения безрезультатно.
  • Я также пробовал определять дальность до маяка, используя следующий метод:
    func startRangingBeacons(satisfying constraint: CLBeaconIdentityConstraint)

Обнаружение на iOS

    var locationManager: CLLocationManager!
    var localBeaconUUID = "578f4eba-a16e-11ea-bb37-0242ac130002"
    let beaconIdentifier = "MyBeacon"

    override func viewDidLoad() {
        locationManager = CLLocationManager()
        locationManager.delegate = self
        locationManager.requestAlwaysAuthorization()
   }

    func startScanning() {
        let uuid = UUID(uuidString: localBeaconUUID)!
        let beaconRegion = CLBeaconRegion(uuid: uuid, identifier: beaconIdentifier)
        locationManager.startMonitoring(for: beaconRegion)
        locationManager.startRangingBeacons(in: beaconRegion)
    }

    func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion) {
        print("Ranged beacons: \(beacons.count)")
    }

Передача iBeacon на Android

    private val uuid = "578f4eba-a16e-11ea-bb37-0242ac130002"

    fun transmitBeacon() {
        val beacon = Beacon.Builder()
                .setId1(uuid)
                .setId2("1")
                .setId3("1")
                .setManufacturer(0x004c)
                .setTxPower(-59)
                .setDataFields(listOf(0L))
                .build()
        val beaconParser = BeaconParser()
                .setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24")
        val beaconTransmitter = BeaconTransmitter(applicationContext, beaconParser)
        beaconTransmitter.startAdvertising(beacon)
    }

1 Ответ

0 голосов
/ 10 июля 2020

Схема, показанная здесь:

val beaconParser = BeaconParser()
                .setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24")

предназначена для AltBeacon, который iOS устройства не могут обнаружить через CoreBluetooth. Вы можете использовать только этот iOS API для обнаружения iBeacon, который имеет этот макет:

val beaconParser = BeaconParser()
                .setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24")

В предыдущем ответе на другом форуме я отметил, что OP использовал макет с добавленным полем данных и предложил удалить его, но не осознал более фундаментальную проблему, заключающуюся в том, что макет в вопросе использует совпадающие байты beac, которые работают только для формата AltBeacon. Для iBeacon необходимо сопоставить 0215

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...