Как получить сопряженные устройства Bluetooth

Я хочу создать одно приложение, которое будет показывать мне сопряженные устройства в моем приложении (например, любое устройство, которое связывало меня до обнаружения и отображения), а также в следующий раз, когда я хочу отправить одно NSString как "привет" с сопряженным устройством. Я искал в Google, и я так запутался!!!

Сначала скажите, пожалуйста, как получить сопряженное устройство с моим мобильным телефоном, а во-вторых, как отправить NSString ценность для них.

1 ответ

Вот пример того, что вам нужно:

Вы должны адаптировать его, чтобы соответствовать тому, что вы хотите. Но вы можете видеть, как это работает...

@implementation ViewController
{
   CBPeripheralManager *_peripheralManager;
   BOOL _isAdvertising;
}

- (void)_startAdvertising
{
   NSUUID *estimoteUUID = [[NSUUID alloc] initWithUUIDString:@"B9407F30-F5F8-466E-AFF9-25556B57FE6D"];

   CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:estimoteUUID
                                                                    major:2
                                                                    minor:1
                                                               identifier:@"SimEstimote"];
   NSDictionary *beaconPeripheralData = [region peripheralDataWithMeasuredPower:nil];

   [_peripheralManager startAdvertising:beaconPeripheralData];
}

- (void)_updateEmitterForDesiredState
{
   if (_peripheralManager.state == CBPeripheralManagerStatePoweredOn)
   {
      // only issue commands when powered on

      if (_isAdvertising)
      {
         if (!_peripheralManager.isAdvertising)
         {
            [self _startAdvertising];
         }
      }
      else
      {
         if (_peripheralManager.isAdvertising)
         {
            [_peripheralManager stopAdvertising];
         }
      }
   }
}

#pragma mark - CBPeripheralManagerDelegate

- (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral
{
   [self _updateEmitterForDesiredState];
}

#pragma mark - Actions

- (IBAction)advertisingSwitch:(UISwitch *)sender
{
   _isAdvertising = sender.isOn;

   [self _updateEmitterForDesiredState];
}

@end

Это для мониторинга:

@implementation AppDelegate
{
   CLLocationManager *_locationManager;
   BOOL _isInsideRegion; // flag to prevent duplicate sending of notification
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)options
{
   // create a location manager
   _locationManager = [[CLLocationManager alloc] init];

   // set delegate, not the angle brackets
   _locationManager.delegate = self;

   NSUUID *estimoteUUID = [[NSUUID alloc] initWithUUIDString:@"B9407F30-F5F8-466E-AFF9-25556B57FE6D"];
   CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:estimoteUUID 
                                                               identifier:@"Estimote Range"];

   // launch app when display is turned on and inside region
   region.notifyEntryStateOnDisplay = YES;

   if ([CLLocationManager isMonitoringAvailableForClass:[CLBeaconRegion class]])
   {
      [_locationManager startMonitoringForRegion:region];

      // get status update right away for UI
      [_locationManager requestStateForRegion:region];
   }
   else
   {
      NSLog(@"This device does not support monitoring beacon regions");
   }

    // Override point for customization after application launch.
    return YES;
}

- (void)_sendEnterLocalNotification
{
   if (!_isInsideRegion)
   {
      UILocalNotification *notice = [[UILocalNotification alloc] init];

      notice.alertBody = @"Inside Estimote beacon region!";
      notice.alertAction = @"Open";

      [[UIApplication sharedApplication] scheduleLocalNotification:notice];
   }

   _isInsideRegion = YES;
}

- (void)_sendExitLocalNotification
{
   if (_isInsideRegion)
   {
      UILocalNotification *notice = [[UILocalNotification alloc] init];

      notice.alertBody = @"Left Estimote beacon region!";
      notice.alertAction = @"Open";

      [[UIApplication sharedApplication] scheduleLocalNotification:notice];
   }

   _isInsideRegion = NO;
}

- (void)_updateUIForState:(CLRegionState)state
{
   ViewController *vc = (ViewController *)self.window.rootViewController;

   if (state == CLRegionStateInside)
   {
      vc.label.text = @"Inside";
   }
   else if (state == CLRegionStateOutside)
   {
      vc.label.text = @"Outside";
   }
   else
   {
      vc.label.text = @"Unknown";
   }
}

#pragma mark - CLLocationManagerDelegate

- (void)locationManager:(CLLocationManager *)manager
      didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region
{
   // always update UI
   [self _updateUIForState:state];

   if ([UIApplication sharedApplication].applicationState == UIApplicationStateActive)
   {
      // don't send any notifications
      return;
   }

   if (state == CLRegionStateInside)
   {
      [self _sendEnterLocalNotification];
   }
   else
   {
      [self _sendExitLocalNotification];
   }
}

@end

Вы можете получить полное описание по этому адресу:

  http://www.cocoanetics.com/2013/11/can-you-smell-the-ibeacon/
Другие вопросы по тегам