0

didEnterRegion メソッドをトリガーするビーコンから「メジャー」および「マイナー」IDを取得しようとしています。測距と監視を組み合わせることでこれを行うことができると言われましたが、正しく機能していないようです.

Estimote ビーコンを使用しており、Estimote API を使用しています。ここで何がうまくいかないのですか?ありがとう!

監視と測距を組み合わせることができると書かれている場所へのリンクは次のとおりです。iBeacon: メジャーとマイナーを取得 - 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];

}

範囲ビーコン:

-(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];

    }
}
4

1 に答える 1

0

Estimote のフレームワークはまだ試していません。私は Core Location フレームワークの Core Location マネージャー、CLBeaconRegion および CLBeacon クラスを使用してきたので、私の答えはそれに基づいています。

それらが同じように機能すると仮定すると、ビーコン測距呼び出しは、1 つ以上のビーコンの配列とそれらが一致する地域の両方を渡します。

リージョンのメジャー バージョンとマイナー バージョンの値は、それらの値でリージョンを設定しない限り、nil になります。

ただし、ビーコン オブジェクトのメジャー値とマイナー値には、実際に検出したビーコンのメジャー番号とマイナー番号が含まれます。現在複数を検出している場合は、1 つを選択するロジックを考え出す必要があります。私が行ったことは、ループして、近接度が不明ではない最も近いものを (精度を使用して) 選択することです。

(いくつかのタイプミスを修正するために編集されました)

于 2013-12-02T03:47:14.717 に答える