【发布时间】:2023-04-10 21:30:01
【问题描述】:
我正在编写需要在设备周围找到 BLE 信标的 Android 和 iOS 应用程序。
当我从 Android 运行我的代码时,它在我所在的房间里发现了几个信标。
我有 8 个信标。
当我从 iPhone 运行信标代码时,它会返回一个正好包含 0 个信标的列表。
这是我的代码:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
[self initRegion];
[self locationManager:self.locationManager didStartMonitoringForRegion:self.beaconRegion];
}
- (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region {
[self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
}
- (void)initRegion {
NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:BEACONUUID];
self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:BEACONIDENTIFIER];
[self.locationManager startMonitoringForRegion:self.beaconRegion];
}
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
NSLog(@"Beacon Found");
[self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
}
-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
NSLog(@"Left Region");
[self.locationManager stopRangingBeaconsInRegion:self.beaconRegion];
self.beaconFoundLabel.text = @"No";
}
-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region {
CLBeacon *beacon = [beacons lastObject];//<== is always 0
self.beaconFoundLabel.text = @"Yes";
self.proximityUUIDLabel.text = beacon.proximityUUID.UUIDString;
self.majorLabel.text = [NSString stringWithFormat:@"%@", beacon.major];
self.minorLabel.text = [NSString stringWithFormat:@"%@", beacon.minor];
self.accuracyLabel.text = [NSString stringWithFormat:@"%f", beacon.accuracy];
if (beacon.proximity == CLProximityUnknown) {
self.distanceLabel.text = @"Unknown Proximity";
} else if (beacon.proximity == CLProximityImmediate) {
self.distanceLabel.text = @"Immediate";
} else if (beacon.proximity == CLProximityNear) {
self.distanceLabel.text = @"Near";
} else if (beacon.proximity == CLProximityFar) {
self.distanceLabel.text = @"Far";
}
self.rssiLabel.text = [NSString stringWithFormat:@"%ld", (long)beacon.rssi];
}
在我的didRangeBeaconsInRegion 中,信标NSArray 总是出现0 个对象。
虽然我有 8 个对象。而且我下载了几个不是我的应用程序,它们都看到了我的几个信标。
为什么我的代码看不到我的任何信标?
【问题讨论】:
-
是否调用了任何信标委托方法?
-
您是否指定了正确的区域 UUID?令人惊讶的是,其他应用会看到您的信标,除非您手动将区域 UUID 输入到它们中,或者它们实际上并没有读取 iBeacon 广告数据包,而只是检测信标的存在而没有获得一致的标识符。
-
@AntonijoDev 你能举一个“任何信标委托方法”的例子吗?
-
@ChrisStratton 是的,我指定了正确的 UUID。我从我拥有的校准应用程序中复制了它。
-
didEnterRegion、didExitRegion、didRangeBeacons...
标签: ios bluetooth-lowenergy ibeacon