Назначение приложения
- Передача сигнала маяка от iOS и обнаружение этого сигнала на Android и iOS устройствах.
- Передача сигнала маяка от 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)
}