我可以在没有定位服务的情况下仅通过蓝牙框架访问信标设备吗?

Posted

技术标签:

【中文标题】我可以在没有定位服务的情况下仅通过蓝牙框架访问信标设备吗?【英文标题】:Can i access beacon device without location service ON with bluetooth frame work only? 【发布时间】:2015-12-30 09:48:05 【问题描述】:

我正在开发一个应用程序来查找信标。但我有一个问题,我只能找到我在代码中定义的信标,但我想动态找到我不知道 UUID 的信标。是否有可能在没有定位服务的情况下找到信标?这是我的代码,我没有收到任何错误。我只想访问没有开启位置服务的区域。

    NSUUID *beaconUUID = [[NSUUID alloc] initWithUUIDString:@"D57092AC-DFAA-446C-8EF3-C81AA22815B5"];
    NSString *regionIdentifier = @"us.iBeaconModules";
    CLBeaconRegion *beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:beaconUUID identifier:regionIdentifier];
    self.locationManager = [[CLLocationManager alloc] init];
    if([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) 
        [self.locationManager requestAlwaysAuthorization];
    
    self.locationManager.delegate = self;
    self.locationManager.pausesLocationUpdatesAutomatically = NO;
    [self.locationManager startMonitoringForRegion:beaconRegion];
    [self.locationManager startRangingBeaconsInRegion:beaconRegion];

【问题讨论】:

Search for all iBeacons and not just with specific UUID的可能重复 【参考方案1】:

不,没有定位服务,您不能使用 iBeacons。

背后的原因可能与隐私有关,因为使用 iBeacons 可以跟踪某人的位置。因此,如果用户关闭了位置服务,则意味着他们不希望您的应用程序跟踪他们的位置。

您当然可以使用蓝牙堆栈来检测您的 iBeacon,但据我所知,您必须先与信标配对,然后才能检测到它的存在。

【讨论】:

感谢 rckoenes 的友好回复。但是BLE的实际用途是什么? iBeacons 基于 BLE,但使用需要定位服务的CLLocationManager 好的。最后一个问题那么地理围栏技术和IBeacon技术有什么区别?在地理围栏中,我们设置了区域,在 ibeacon 中,我们也在创建区域。表示两者相同。我认为它没有任何意义。对... 我可以从 CLLocationManager 委托中动态获取 UUID 吗?不是静态 UUID。 地理围栏区域使用 GPS 坐标检查用户是否在该区域内。您只能设置有限数量的区域。 iBeacon 使用 BLE 来检测该区域的存在,这甚至可能是一个移动的物体,并且您不受地理围栏区域的限制。你只能监控 iBeacons 只有知道 UUID 才能被监控。

以上是关于我可以在没有定位服务的情况下仅通过蓝牙框架访问信标设备吗?的主要内容,如果未能解决你的问题,请参考以下文章

蓝牙信标/ iBeacon的浏览器感知

当我的手机蓝牙在 Android 应用程序中关闭时,我可以识别信标吗?

iBeacon / 低功耗蓝牙(BLE 设备)- 信标的最大数量

是否可以使用目标 C 扫描禁用位置服务的信标?

如何通过网络管理蓝牙信标?

为啥我无法使用 C# 检测到蓝牙 Estimote 信标,但 Windows 操作系统可以找到它们?