Цель C, как узнать расстояние между двумя iPhone в помещении с помощью iBeacon - PullRequest
0 голосов
/ 01 мая 2020

Я использую iBeacon для расчета расстояния между одним iPhone другим iPhone в помещении. Я использую UUID и вставляю в код. Но я не получил расстояние от одного iPhone до другого iPhone в помещении. Я пишу код, как это. Может ли любое тело помочь мне, пожалуйста. Я получил ошибку, как это: CBManagerStateUnsupported. и еще одна проблема: [CoreBluetooth] XPC connection invalid

#import <UIKit/UIKit.h>

#import <CoreLocation/CoreLocation.h>

#import <CoreBluetooth/CoreBluetooth.h>

@interface ConfigViewController : UIViewController <CBPeripheralManagerDelegate,CBPeripheralDelegate,CBCentralManagerDelegate>

{

    CBCentralManager *manager;

}

@property (strong, nonatomic) CLBeaconRegion *beaconRegion;

@property (weak, nonatomic) IBOutlet UILabel *uuidLabel;

@property (weak, nonatomic) IBOutlet UILabel *majorLabel;

@property (weak, nonatomic) IBOutlet UILabel *minorLabel;

@property (weak, nonatomic) IBOutlet UILabel *identityLabel;

@property (strong, nonatomic) NSDictionary *beaconPeripheralData;

@property (strong, nonatomic) CBPeripheralManager *peripheralManager;

@end

- (void)viewDidLoad
{

[super viewDidLoad];

// Do any additional setup after loading the view.

[self initBeacon];

[self setLabels];

}

- (void)initBeacon {

NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:@"EC1309B2-9736-40FF-B255-7EE047F2166B"];

self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid
major:1 minor:1 identifier:@"com.devfright.myRegion"];

self.beaconPeripheralData =[self.beaconRegion peripheralDataWithMeasuredPower:nil];

self.peripheralManager =[[CBPeripheralManager alloc] initWithDelegate:self queue:nil options:nil];

}

- (void)setLabels {

self.uuidLabel.text = self.beaconRegion.proximityUUID.UUIDString;

self.majorLabel.text = [NSString stringWithFormat:@"%@", self.beaconRegion.major];

self.minorLabel.text = [NSString stringWithFormat:@"%@", self.beaconRegion.minor];

self.identityLabel.text = self.beaconRegion.identifier;

}

- (IBAction)transmitBeacon:(UIButton *)sender {

self.beaconPeripheralData = [self.beaconRegion peripheralDataWithMeasuredPower:nil];

self.peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil options:nil];

}

-(void) peripheralManagerDidUpdateState:
(CBPeripheralManager *)peripheral {

NSLog(@"peripheralManagerDidUpdateState:");

switch (peripheral.state) {

case CBManagerStatePoweredOff:

NSLog(@"CBManagerStatePoweredOff");

break;

case CBManagerStateResetting:

NSLog(@"CBManagerStateResetting");

break;

case CBManagerStatePoweredOn:

NSLog(@"CBManagerStatePoweredOn");

//---start advertising the beacon data---

[self.peripheralManager startAdvertising:self.beaconPeripheralData];

break;

case CBManagerStateUnauthorized:

NSLog(@"CBManagerStateUnauthorized");

break;

case CBManagerStateUnsupported:

NSLog(@"CBManagerStateUnsupported");

break;

default:

NSLog(@"CBPeripheralStateUnknown");

break;

}

}

TrackViewController.h

@interface TrackViewController : UIViewController <CLLocationManagerDelegate,CBPeripheralDelegate,CBCentralManagerDelegate>

@property (weak, nonatomic) IBOutlet UILabel *beaconFoundLabel;

@property (weak, nonatomic) IBOutlet UILabel *proximityUUIDLabel;

@property (weak, nonatomic) IBOutlet UILabel *majorLabel;

@property (weak, nonatomic) IBOutlet UILabel *minorLabel;

@property (weak, nonatomic) IBOutlet UILabel *accuracyLabel;

@property (weak, nonatomic) IBOutlet UILabel *distanceLabel;

@property (weak, nonatomic) IBOutlet UILabel *rssiLabel;

@property (strong, nonatomic) CLBeaconRegion *beaconRegion;

@property (strong, nonatomic) CLLocationManager *locationManager;

TrackViewController.m

- (void)viewDidLoad
{

[super viewDidLoad];

// Do any additional setup after loading the view.

self.locationManager = [[CLLocationManager alloc] init];

self.locationManager.delegate = self;

//---create a NSUUID object---

NSUUID *proximityUUID =[[NSUUID alloc] initWithUUIDString:@"EC1309B2-9736-40FF-B255-7EE047F2166B"];

self.beaconRegion =[[CLBeaconRegion alloc]initWithProximityUUID:proximityUUID
                  identifier:@"net.learn2develop.myRegion"];

//---start monitoring a region---

[self.locationManager startMonitoringForRegion:self.beaconRegion];

}

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {

//---start ranging for iBeacons---

[self.locationManager startRangingBeaconsInRegion:self.beaconRegion];

// self.lblStatus.text = @"Entered region";

UILocalNotification *localNotification =[[UILocalNotification alloc] init];

//---the message to display for the alert---

localNotification.alertBody =@"You have entered the region you are monitoring";

//---uses the default sound---

localNotification.soundName =UILocalNotificationDefaultSoundName;

//---title for the button to display---

localNotification.alertAction = @"Details";

//---schedule the notification---

[[UIApplication sharedApplication]presentLocalNotificationNow:localNotification];

}

-(void)locationManager:(CLLocationManager *)manager
         didExitRegion:(CLRegion *)region {

//---stop ranging for iBeacons---

[self.locationManager stopRangingBeaconsInRegion:self.beaconRegion];

}

//---when iBeacons are found---
-(void)locationManager:(CLLocationManager *)manager
       didRangeBeacons:(NSArray *)beacons
              inRegion:(CLBeaconRegion *)region {

CLBeacon *beacon = [[CLBeacon alloc] init];

beacon = [beacons lastObject];

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 meters", beacon.accuracy];

switch (beacon.proximity) {

case CLProximityUnknown:

self.distanceLabel.text = @"Unknown Proximity";

break;

case CLProximityImmediate:

self.distanceLabel.text = @"Immediate";

break;

case CLProximityNear:

self.distanceLabel.text = @"Near";

break;

case CLProximityFar:

self.distanceLabel.text = @"Far";

break;

}

self.rssiLabel.text =[NSString stringWithFormat:@"%li decibels",
            (long)beacon.rssi];

}
...