IOS Phonegap估计信标测距
我正在尝试为Estimote iBeacons创建一个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
#pragma mark-Beacon Manager委托方法中没有触发任何函数。
区域
对mygetRange
函数的调用起作用,当我添加标记时,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:
结果=@“回车”;
打破