将信标监控与信标测距相结合,以获取didEnterRegion方法的主要和次要ID

时间:2013-12-01 22:26:49

标签: ios iphone objective-c ibeacon

我试图从触发didEnterRegion方法的信标中获取“主要”和“次要”ID。我被告知我可以通过将测距和监控结合在一起来实现这一点,但我似乎无法使其正常工作。

我正在使用Estimote信标并使用Estimote API。有什么想法在这里出错吗?谢谢!

以下是指示您可以将监控和范围结合起来的链接:iBeacon: get major and minor - only looking for uuid

设定:

#import "ViewController.h"
#import "ESTBeaconManager.h"

@interface ViewController () <ESTBeaconManagerDelegate>

@property (nonatomic, strong) ESTBeaconManager* beaconManager;
@property (nonatomic, strong) UIImageView*      bgImageView;
@property (nonatomic, assign) BOOL              notificationShown;
@property (nonatomic, strong) UIImageView*      productImage;

@end

@implementation ViewController

viewDidLoad中:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.beaconManager = [[ESTBeaconManager alloc] init];
    self.beaconManager.delegate = self;
    self.beaconManager.avoidUnknownStateBeacons = YES;

    ESTBeaconRegion* region = [[ESTBeaconRegion alloc] 
    initRegionWithIdentifier:@"EstimoteSampleRegion"];

    [self.beaconManager startMonitoringForRegion:region];
    [self.beaconManager requestStateForRegion:region];
    [self.beaconManager startRangingBeaconsInRegion:region];

    [[NSUserDefaults standardUserDefaults] setObject:@"FALSE" 
    forKey:@"connectedToBeacon"];
    [[NSUserDefaults standardUserDefaults] synchronize];

}

DidRangeBeacons:

-(void)beaconManager:(ESTBeaconManager *)manager
     didRangeBeacons:(NSArray *)beacons
            inRegion:(ESTBeaconRegion *)region {

    NSString *connectedToBeacon = [[NSUserDefaults standardUserDefaults] 
    stringForKey:@"connectedToBeacon"];

    if (connectedToBeacon == FALSE) {

        NSNumber *beaconMajor = region.major;
        NSNumber *beaconMinor = region.minor;

        NSString *alertText = [NSString stringWithFormat:@" Entering (%@,%@)", 
        beaconMajor, beaconMinor];

        UILocalNotification *notification = [[UILocalNotification alloc] init];
        notification.alertBody = alertText;
        notification.soundName = UILocalNotificationDefaultSoundName;

        [[UIApplication sharedApplication] presentLocalNotificationNow:notification];

        [[NSUserDefaults standardUserDefaults] setObject:@"TRUE" 
        forKey:@"connectedToBeacon"];
        [[NSUserDefaults standardUserDefaults] synchronize];

    }
}

1 个答案:

答案 0 :(得分:0)

我还没有尝试过使用Estimote的框架。我一直在使用Core Location框架的核心位置管理器,CLBeaconRegion和CLBeacon类,所以我的答案将基于此。

假设它们以相同的方式工作,信标测距呼叫将传递一个或多个信标的数组以及它们匹配的区域。

除非您使用这些值设置区域,否则区域中的主要和次要版本值将为零。

但是,信标对象中的主要值和次要值将包含您实际检测到的信标的主要和次要数量。如果您当前正在检测多个,那么您必须提出选择一个的逻辑。我所做的就是循环并选择最近的一个(使用准确度)谁的接近度是未知的。

(编辑纠正一些错别字)