我正在使用Nordic BLE nRF8001开发套件来测试CoreBluetooth.使用CBCentralManager的方法(例如didDiscoverPeripheral(),didConnectPeripheral()等),我的iPhone 5能够检测到北欧设备的广告并连接到它就好了.但是,我没有收到新的locationManager range或regionMonitoring方法的任何响应.下面我将解释我的设置:
1.)首先,我使用传入的外围设备(我的Nordic设备)在didDiscoverPeripheral()委托方法中从我的Nordic设备检索我的NSUUID.我为我的Nordic设备创建了一个自定义服务,所以假设这个外围设备是Nordic设备.要检索我使用的NSUUID:
NSUUID *uuid = [peripheral identifier];
NSString *uuidString = [uuid UUIDString]; //uuidString = 9A8D4C73-152D-BBDA-E4C2-9CE952654645
Run Code Online (Sandbox Code Playgroud)
2.)接下来,我为我的Nordic设备创建一个信标区域并创建一个CLLocationManager:
self.locationManagerBeacon = [[CLLocationManager alloc] init];
[self.locationManagerBeacon setDelegate:self];
NSUUID *myUUID = [[NSUUID alloc] initWithUUIDString:@"9A8D4C73-152D-BBDA-E4C2-9CE952654645"];
self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:myUUID
identifier:@"nordicRegion"];
self.beaconRegion.notifyEntryStateOnDisplay = YES;
Run Code Online (Sandbox Code Playgroud)
3.)现在我开始监控信标区域
[self.locationManagerBeacon startRangingBeaconsInRegion:self.beaconRegion];
Run Code Online (Sandbox Code Playgroud)
4.)问题:locationManager:didRangeBeacons:调用inRegion,但信标区域始终为空.
问题:Nordic BLE设备是否需要以某种方式配置,以便新的locationManager信标方法能够检测到它(例如BLE广告频率,功率电平等)?如果是这样,有人可以指向我的文档.
感谢帮助!
我正在上课来处理我所有的iBeacon测试.它的目的是开始寻找区域,范围信标,识别它们然后发送通知.代码如下.
我遇到的问题是应用程序运行速度非常慢,我知道iBeacons有延迟问题,有时只是停止工作(不会识别关闭信标).我知道,我的代码很混乱,在我清理它之前尝试对逻辑进行排序.我想知道我是否错过了一个逻辑缺陷(我的意思是,我想知道我引入了哪些逻辑漏洞!).
#import "dcBeaconManager.h"
@implementation dcBeaconManager
@synthesize currentBeaconState;
bool testRanging = false;
int firstRegionEntered = 0;
int beaconsRangedCount = 0;
- (void)initBeaconManager {
NSLog(@"initBeaconManager called");
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
NSUUID *uuid = [[NSUUID alloc]initWithUUIDString:@"B9407F30-F5F8-466E-AFF9-25556B57FE6D"];
self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:@"digiConsRegion"];
[self.locationManager startMonitoringForRegion:self.beaconRegion];
[self.locationManager requestStateForRegion:self.beaconRegion];
currentBeaconState = @"initial";
}
- (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region {
NSLog(@"Started looking for regions");
[self.locationManager requestStateForRegion:self.beaconRegion];
}
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
NSLog(@"Region discovered");
if (firstRegionEntered == 0) {
NSLog(@"First time …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用UUID作为特定信标的标识符(在这种情况下使用手机).我知道major和minor用于执行此操作,但我宁愿使用UUID或标识符字符串.
话虽如此,无论如何使用CLBeacon API扫描信标是否有UUID?
在iOS上,在我的应用程序委托中,我开始进行区域监视,一旦进入信标区域,我就使用locationManager:didRangeBeacons:inRegion启动测距逻辑.根据Apple文档,只有当区域在范围内或超出范围或范围发生变化时,才应调用此方法.
我的问题是,只要我在区域内,我每秒都会调用此方法.如何在仍然测距的情况下减少对此方法的调用次数?
我的应用程序如何同时传输其iBeacon(以宣传自己)和其他iBeacons的范围(以发现运行相同应用程序的对等体)?
那里有代码样本吗?
ios App是否可以收听多个UUID?专门针对苹果iBeacon技术.
NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:@"23542266-18D1-4FE4-B4A1-23F8195B9D39"];
self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:@"com.devfright.myRegion"];
[self.locationManager startMonitoringForRegion:self.beaconRegion];
Run Code Online (Sandbox Code Playgroud)
使用此代码可以开始监视以下uuid:23542266-18D1-4FE4-B4A1-23F8195B9D39,如果我要添加另一个类听另一个uuid,这会工作,不会有任何干扰吗?也许添加几个听众?
我正在努力更好地了解蓝牙LE,并一直在玩iOS和Android的蓝牙堆栈和各种信标(StickNFind,Estimote等......)
很公平,除了我试图使用CoreBluetooth(即:非位置服务)从iBeacon读取广告数据,并注意到iOS似乎剥离了iBeacon设备的制造商特定广告数据.
我意识到我应该使用Apple批准的方法来检测iBeacons,但它并不适合我们的用例,并想知道是否有办法解决它.
我正在开发一个处理信标和位置管理的iOS应用程序.在iOS 8中,应用程序必须在plist文件中包含"NSLocationWhenInUseUsageDescription"键,该文件将在启动时显示在应用程序中,以获得用户启用位置跟踪的权限.如何检测用户是否接受?我想就此作出决定.
谢谢.
我目前正在研究一个扫描我的公司信标的BLE应用程序,我需要更新CBC特性的值.
写入函数后我没有收到任何错误,但更改并未反映在BLE设备上.
我扫描了所有CBC特性,然后遍历以获取特定的并调用写入功能
for (CBCharacteristic* characteristic in beaconCharacteristics)
{
if ([characteristic.UUID isEqual:[CBUUID UUIDWithString:@"FFF5"]]) {
[characteristic.service.peripheral writeValue:[@"BeaconE" dataUsingEncoding:NSUTF8StringEncoding] forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse];
}
}
Run Code Online (Sandbox Code Playgroud)
甚至我在写完后没有错误就得到了完成委托方法
-(void)peripheral:(CBPeripheral *)peripheral didWriteValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
{
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?是否由于十六进制值?
请指导我
谢谢 !
我已经按照本教程概述了在Ionic 2应用程序中添加监控信标.我有它工作得很好:当视图加载时,它初始化并开始监听信标:
home.ts
ionViewDidLoad() {
this.platform.ready().then(() => {
this.beaconProvider.initialise().then((isInitialised) => {
if (isInitialised) {
this.listenToBeaconEvents();
}
});
});
}
Run Code Online (Sandbox Code Playgroud)
这将调用listenToBeaconEvents函数,该函数使用所有信标填充视图中的列表:
home.ts
listenToBeaconEvents() {
this.events.subscribe(‘didRangeBeaconsInRegion’, (data) => {
// update the UI with the beacon list
this.zone.run(() => {
this.beacons = [];
let beaconList = data.beacons;
beaconList.forEach((beacon) => {
let beaconObject = new BeaconModel(beacon);
this.beacons.push(beaconObject);
});
});
});
}
Run Code Online (Sandbox Code Playgroud)
我可以使用this.beaconProvider.stopRanging()以下函数调用函数来停止测距:
信标provider.ts
stopRanging() {
if (this.platform.is('cordova')) {
// stop ranging
this.ibeacon.stopRangingBeaconsInRegion(this.region)
.then(
() => {
console.log('Stopped …Run Code Online (Sandbox Code Playgroud)