首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS CLLocationManager没有检测到安卓信标库发送的iBeacon信号

iOS CLLocationManager没有检测到安卓信标库发送的iBeacon信号
EN

Stack Overflow用户
提问于 2020-07-09 17:05:11
回答 1查看 140关注 0票数 1

App用途

Devices.

  • Transmit
  1. 从iOS发送信标信号,在安卓和iOS上检测信号,在安卓和iOS设备上检测信标信号,在安卓和iOS设备上检测信号。

技术

Android: Android灯塔图书馆。

在Android设备之间发送和接收accuracy)

  • iBeacon

  • AltBeacon信号(为了从iOS发送更好的信号,从安卓发送并在iOS (非Working) )上接收到
  • AltBeacon信号

iOS: CoreLocation CLLocationManager iBeacon.

从Working)发送的

  • iBeacon信号和iOS
  • iBeacon接收的信号,以及从安卓发送的
  • 信号和iOS 接收的信号(非Working)

)

问题

  • 在两个平台上使用相同的UUID,当从iOS发送iBeacon信号时,使用CLLocationManager委托方法

在另一个iOS设备上检测到。

代码语言:javascript
复制
    locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion)

使用相同的UUID使用Android发送来自安卓的iBeacon信号,在iOS.上的上述CLLocationManager委托方法没有检测到信标。

“守则”

为了增加探测的机会,我已经取消了对mismatch.

  • Yes侧的主值和小值的要求,以防止iOS过滤出由于主值和次要值而导致的信标信号的可能性。我已经尝试添加大小值,但没有结果。

  • I也尝试使用以下方法对信标进行测距:

代码语言:javascript
复制
    func startRangingBeacons(satisfying constraint: CLBeaconIdentityConstraint)

在iOS上的检测

代码语言:javascript
复制
    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)")
    }

在Android上传输iBeacon

代码语言:javascript
复制
    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)
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-10 00:25:37

这里显示的布局如下:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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上匹配

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62820049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档