IOS Phonegap估计信标测距

IOS Phonegap估计信标测距,ios,cordova,phonegap-plugins,Ios,Cordova,Phonegap Plugins,我正在尝试为Estimote iBeacons创建一个Phonegap插件。在#pragma mark-Beacon Manager委托方法中没有触发任何函数。区域 对mygetRange函数的调用起作用,当我添加标记时,start函数在调试中停止。我还在信标管理器委托方法中添加了中断标记,但它们都没有被触发 我不知道我做错了什么,我一直在阅读关于7.1版IOS的问题,这些问题在7.1.2版上得到了解决,所以我更新了我的iPadMini 下面是我的代码。有人有线索吗 #import <Co

我正在尝试为Estimote iBeacons创建一个Phonegap插件。在
#pragma mark-Beacon Manager委托方法中没有触发任何函数。
区域

对my
getRange
函数的调用起作用,当我添加标记时,
start
函数在调试中停止。我还在
信标管理器委托方法中添加了中断标记
,但它们都没有被触发

我不知道我做错了什么,我一直在阅读关于7.1版IOS的问题,这些问题在7.1.2版上得到了解决,所以我更新了我的iPadMini

下面是我的代码。有人有线索吗

#import <Cordova/CDV.h>
#import "Beacon.h"
#import "ESTBeaconManager.h"

@interface Beacon () <ESTBeaconManagerDelegate,ESTBeaconDelegate>

@property (nonatomic, strong) ESTBeaconManager* beaconManager;
@property (nonatomic, strong) NSMutableArray *callbacks;
@property (nonatomic, strong) NSMutableArray *watches;
@end


@implementation Beacon

- (Beacon*)pluginInitialize
{
    // region watchers
    self.regionWatchers = [[NSMutableDictionary alloc] init];

    // Create callbacks list
    self.callbacks = [[NSMutableArray alloc]init];
    self.watches = [[NSMutableArray alloc]init];

    // craete manager instance
    self.beaconManager = [[ESTBeaconManager alloc] init];
    self.beaconManager.delegate = self;
    self.beaconManager.avoidUnknownStateBeacons = YES;

    // create sample region object (you can additionaly pass major / minor values)
    NSUUID* uuid = [[NSUUID alloc] initWithUUIDString:@"B9407F30-F5F8-466E-AFF9-25556B57FE6D"];
    self.currentRegion = [[ESTBeaconRegion alloc] initWithProximityUUID:uuid identifier:@"test"];
    self.currentRegion.notifyEntryStateOnDisplay=YES;


    return self;
}

#pragma mark - Start monitoring methods

- (void)getRange:(CDVInvokedUrlCommand*)command {
    [self addCallback:command.callbackId];
}
- (void)addWatch:(CDVInvokedUrlCommand*)command {

}
- (void)clearWatch:(CDVInvokedUrlCommand*)command {

}

- (void)start {
    [self stop];

    // start ranging
    [self.beaconManager startMonitoringForRegion:self.currentRegion];
    [self.beaconManager startRangingBeaconsInRegion:self.currentRegion];
}

- (void)stop {
    // stop existing discovery/ranging
    [self.beaconManager stopEstimoteBeaconDiscovery];
    [self.beaconManager stopRangingBeaconsInRegion:self.currentRegion];
}

- (void)addCallback:(NSString*)callbackId {
    [self.callbacks addObject:callbackId];
    if( [self size] == 1){
        [self start];
    }
}
- (NSUInteger)size {
    return [self.callbacks count] + [self.watches count];
}
- (void)win {
    // Create output
    NSMutableArray* output = [NSMutableArray array];
    if([self.beacons count] > 0)
    {
        //convert list of beacons to a an array of simple property-value objects
        for (id beacon in self.beacons) {
            [output addObject:[self beaconToDictionary:beacon]];
        }
    }

    CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsArray:output];

    // Handle callbacks
    for (NSString *callbackid in self.callbacks) {
        [self.commandDelegate sendPluginResult:pluginResult callbackId:callbackid];
    }

    [self.callbacks removeAllObjects];

    // Handle watches
    [pluginResult setKeepCallback:[NSNumber numberWithBool:YES]];
    for (NSString *callbackid in self.watches) {
        [self.commandDelegate sendPluginResult:pluginResult callbackId:callbackid];
    }

    if( [self.watches count] == 0){
        [self stop];
    }
}
#pragma mark - Helpers

- (NSMutableDictionary*)beaconToDictionary:(ESTBeacon*)beacon
{
    NSMutableDictionary* props = [NSMutableDictionary dictionaryWithCapacity:16];
    NSNumber* major = beacon.major;
    NSNumber* minor = beacon.minor;
    NSNumber* rssi = [NSNumber numberWithInt:beacon.rssi];

    if(major == nil) {
        major = beacon.major;
    }
    if(minor == nil) {
        minor = beacon.minor;
    }
    if(rssi == nil) {
        rssi = [NSNumber numberWithInt:beacon.rssi];
    }

    [props setValue:beacon.batteryLevel forKey:@"batteryLevel"];
    [props setValue:beacon.firmwareVersion forKey:@"firmwareVersion"];
    [props setValue:beacon.hardwareVersion forKey:@"hardwareVersion"];
    [props setValue:major forKey:@"major"];
    [props setValue:minor forKey:@"minor"];
    [props setValue:beacon.advInterval forKey:@"advInterval"];
    [props setValue:beacon.description forKey:@"description"];
    [props setValue:rssi forKey:@"rssi"];
    [props setValue:beacon.debugDescription forKey:@"debugDescription"];
    [props setValue:beacon.macAddress forKey:@"macAddress"];
    [props setValue:beacon.measuredPower forKey:@"measuredPower"];
    [props setValue:[NSNumber numberWithBool:beacon.isConnected] forKey:@"isConnected"];

    if(beacon.power != nil) {
        [props setValue:[NSNumber numberWithChar:[beacon.power charValue]] forKey:@"power"];
    }

    if(beacon != nil) {
        [props setValue:beacon.distance forKey:@"accuracy"];
        [props setValue:[NSNumber numberWithInt:beacon.proximity] forKey:@"proximity"];

        if(beacon.proximityUUID != nil) {
            [props setValue:beacon.proximityUUID.UUIDString forKey:@"proximityUUID"];
        }
    }


    return props;
}

#pragma mark - Beacon Manager delegate methods.

- (void)beaconManager:(ESTBeaconManager *)manager
   didDiscoverBeacons:(NSArray *)beacons
             inRegion:(ESTBeaconRegion *)region
{
    self.beacons = beacons;

    [self win];
}

-(void)beaconManager:(ESTBeaconManager *)manager
     didRangeBeacons:(NSArray *)beacons
            inRegion:(ESTBeaconRegion *)region
{
    self.beacons = beacons;
    [self win];
}

- (void)beaconManager:(ESTBeaconManager *)manager didDetermineState:(CLRegionState)state forRegion:(ESTBeaconRegion *)region {
    NSString *result = nil;

    switch(state) {
        case CLRegionStateUnknown:
            result = @"unknown";
            break;
        case CLRegionStateInside:
            result = @"enter";
            break;
        case CLRegionStateOutside:
            result = @"exit";
            break;
        default:
            result = @"unknown";
    }

    NSString* callbackId = [self.regionWatchers objectForKey:region.identifier];

    if(callbackId != nil) {
        NSMutableDictionary* props = [NSMutableDictionary dictionaryWithCapacity:4];

        [props setValue:region.identifier forKey:@"id"];
        [props setValue:region.major forKey:@"major"];
        [props setValue:region.minor forKey:@"minor"];
        [props setValue:result forKey:@"action"];

        CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:props];
        [result setKeepCallback:[NSNumber numberWithBool:YES]];

        [self.commandDelegate sendPluginResult:result callbackId:callbackId];
    }
}

@end
#导入
#导入“Beacon.h”
#导入“ESTBeaconManager.h”
@接口信标()
@属性(非原子,强)ESTBeaconManager*beaconManager;
@属性(非原子,强)NSMutableArray*回调;
@属性(非原子,强)NSMutableArray*表;
@结束
@实现信标
-(信标*)插件初始化
{
//区域观察者
self.regionWatchers=[[NSMutableDictionary alloc]init];
//创建回调列表
self.callbacks=[[NSMutableArray alloc]init];
self.watches=[[NSMutableArray alloc]init];
//craete管理器实例
self.beaconManager=[[ESTBeaconManager alloc]init];
self.beaconManager.delegate=self;
self.beaconManager.avoidUnknownStateBeacons=是;
//创建采样区域对象(可以额外传递主/次值)
NSUID*uuid=[[NSUID alloc]initWithUUIString:@“B9407F30-F5F8-466E-AFF9-25556B57FE6D”;
self.currentRegion=[[ESTBeaconRegion alloc]initWithProximityUID:uuid标识符:@“测试”];
self.currentRegion.notifyEntryStateondDisplay=YES;
回归自我;
}
#pragma标记-启动监视方法
-(void)getRange:(CDVInvokedUrlCommand*)命令{
[self addCallback:command.callbackId];
}
-(void)addWatch:(CDVInvokedUrlCommand*)命令{
}
-(void)clearWatch:(CDVInvokedUrlCommand*)命令{
}
-(无效)开始{
[自动停止];
//开始测距
[self.beaconManager startMonitoringForRegion:self.currentRegion];
[self.beaconManager startrangbeaconregion:self.currentRegion];
}
-(无效)停止{
//停止现有的发现/测距
[self.beaconManager stopestimotebacondiscovery];
[self.beaconManager stoprangingbeaconregion:self.currentRegion];
}
-(void)addCallback:(NSString*)callbackId{
[self.callbacks addObject:callbackId];
如果([自身大小]==1){
[自启动];
}
}
-(整数)大小{
返回[self.callbacks count]+[self.watchs count];
}
-(无效)赢{
//创建输出
NSMutableArray*输出=[NSMutableArray];
如果([self.beacons count]>0)
{
//将信标列表转换为简单属性值对象数组
for(self.beacons中的id信标){
[output addObject:[自信标:信标]];
}
}
CDVPluginResult*pluginResult=[CDVPluginResult resultWithStatus:CDVCommandStatus_OK message数组:输出];
//处理回调
for(self.callbacks中的NSString*callbackid){
[self.commandDelegate sendPluginResult:pluginResult callbackId:callbackId];
}
[self.callbacks removeAllObjects];
//手摇表
[pluginResult setKeepCallback:[NSNumber number Withbool:YES]];
for(self.watchs中的NSString*callbackid){
[self.commandDelegate sendPluginResult:pluginResult callbackId:callbackId];
}
如果([self.watchs count]==0){
[自动停止];
}
}
#pragma标记-助手
-(NSMutableDictionary*)信标字典:(ESTBeacon*)信标
{
NSMutableDictionary*props=[NSMutableDictionary字典容量:16];
NSNumber*major=beacon.major;
NSNumber*次要=信标。次要;
NSNumber*rssi=[NSNumber numberwhithint:beacon.rssi];
如果(主要==零){
少校=信标。少校;
}
如果(次要==零){
小调=信标。小调;
}
如果(rssi==nil){
rssi=[NSNumber numberwhithint:beacon.rssi];
}
[道具设置值:beacon.batteryLevel-forKey:@“batteryLevel”];
[道具设置值:beacon.firmwareVersion forKey:@“firmwareVersion”];
[道具设置值:beacon.hardwareVersion forKey:@“hardwareVersion”];
[props setValue:major forKey:@“major”];
[props setValue:minor forKey:@“minor”];
[道具设置值:beacon.advInterval-forKey:@“advInterval”];
[道具设置值:beacon.description forKey:@“description”];
[道具设置值:rssi-forKey:@“rssi”];
[props setValue:beacon.debugDescription forKey:@“debugDescription”];
[props setValue:beacon.macAddress forKey:@“macAddress”];
[道具设置值:beacon.measuredPower forKey:@“measuredPower”];
[props setValue:[NSNumber numberWithBool:BEACHON.isConnected]forKey:@“isConnected”];
if(beacon.power!=nil){
[props setValue:[NSNumber numberWithChar:[beacon.power charValue]]forKey:@“power”];
}
如果(信标!=零){
[道具设置值:beacon.distance forKey:@“准确度”];
[props setValue:[NSNumber NUMBER WITHINT:beacon.approxity]forKey:@“approxity”];
如果(beacon.proximityuid!=nil){
[props setValue:beacon.proximityuid.UUIDString forKey:@“proximityuid”];
}
}
返回道具;
}
#pragma标记-信标管理器委托方法。
-(无效)beaconManager:(ESTBeaconManager*)经理
didDiscoverBeacons:(NSArray*)信标
区域:(ESTBEACON区域*)区域
{
self.beacons=信标;
[自赢];
}
-(无效)beaconManager:(ESTBeaconManager*)经理
DidRange信标:(NSArray*)信标
区域:(ESTBEACON区域*)区域
{
self.beacons=信标;
[自赢];
}
-(void)beaconManager:(ESTBeaconManager*)manager:(CLRegionState)地区的州:(ESTBeaconRegion*)地区{
NSString*结果=nil;
开关(状态){
案例CLRegionStateUnknown:
结果=@“未知”;
打破
案例CLRegionStateInside:
结果=@“回车”;
打破