Подтвердить что ты не робот

Как получить список доступных устройств Bluetooth?

В настоящее время я создаю приложение для iPhone (Xcode 4.3.1, IOS 5), которое может использовать устройства Bluetooth! Главная цель этого приложения - внутренняя навигация (GPS внутри зданий не очень точная).

Единственное решение, которое я вижу здесь (чтобы сохранить приложение в AppStore), - это попробовать сканировать доступные Bluetooth-устройства!

Я попытался использовать инфраструктуру CoreBluetooth, но я не получаю список доступных устройств! Возможно, я не правильно использую эти функции

#import <UIKit/UIKit.h>
#import <CoreBluetooth/CoreBluetooth.h>

@interface AboutBhyperView : UIViewController <CBPeripheralDelegate, CBCentralManagerDelegate>
{
    CBCentralManager *mgr;
}
@property (readwrite, nonatomic) CBCentralManager *mgr;
@end



- (void)viewDidLoad
{
    [super viewDidLoad];

    mgr = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
}


- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI {


    NSLog([NSString stringWithFormat:@"%@",[advertisementData description]]);
}

-(void)centralManager:(CBCentralManager *)central didRetrievePeripherals:(NSArray *)peripherals{
    NSLog(@"This is it!");
}


- (void)centralManagerDidUpdateState:(CBCentralManager *)central{ 
    NSString *messtoshow;

    switch (central.state) {
        case CBCentralManagerStateUnknown:
        {
            messtoshow=[NSString stringWithFormat:@"State unknown, update imminent."];
            break;
        }
        case CBCentralManagerStateResetting:
        {
            messtoshow=[NSString stringWithFormat:@"The connection with the system service was momentarily lost, update imminent."];
            break;
        }
        case CBCentralManagerStateUnsupported:
        {
            messtoshow=[NSString stringWithFormat:@"The platform doesn't support Bluetooth Low Energy"];
            break;
        }
        case CBCentralManagerStateUnauthorized:
        {
            messtoshow=[NSString stringWithFormat:@"The app is not authorized to use Bluetooth Low Energy"];
            break;
        }
        case CBCentralManagerStatePoweredOff:
        {
            messtoshow=[NSString stringWithFormat:@"Bluetooth is currently powered off."];
            break;
        }
        case CBCentralManagerStatePoweredOn:
        {
            messtoshow=[NSString stringWithFormat:@"Bluetooth is currently powered on and available to use."];
            [mgr scanForPeripheralsWithServices:nil options:nil];
            //[mgr retrieveConnectedPeripherals];

//--- it works, I Do get in this area!

            break;
        }   

    }
    NSLog(messtoshow); 
} 

Я не уверен в этой строке, как передать правильные параметры?

[mgr scanForPeripheralsWithServices:nil options:nil];

Я взглянул на ссылку на яблоко. И я до сих пор не понимаю, что это CBUUID??? У каждого устройства есть некоторый идентификатор Bluetooth? где я могу его найти?

- (void)scanForPeripheralsWithServices:(NSArray *)serviceUUIDs options:(NSDictionary *)options;

Параметры serviceUUIDs - массив CBUUID, в котором заинтересовано приложение. options - словарь для настройки сканирования, см. CBCentralManagerScanOptionAllowDuplicatesKey.

Есть ли другой способ использования Bluetooth в IOS? Я имею в виду более старые рамки, которые не используют BLE 4.0!

любой совет будет оценен!

спасибо!

4b9b3361

Ответ 1

Это руководство выглядит многообещающе для Bluetooth 3.0. Помните, что платформа CoreBluetooth предназначена ТОЛЬКО для Bluetooth Low Energy (4.0). На страницах разработки bluetooth.com вы можете увидеть некоторые примеры глобально определенных служб, и, как упоминает Гуань Ян, вы можете увидеть, что частота сердечных сокращений составляет 0x180D. UUID единицы определяется производителем.

Вот фрагмент кода, который, возможно, поможет вам в пути.

// Initialize a private variable with the heart rate service UUID    
CBUUID *heartRate = [CBUUID UUIDWithString:@"180D"];

// Create a dictionary for passing down to the scan with service method
NSDictionary *scanOptions = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO] forKey:CBCentralManagerScanOptionAllowDuplicatesKey];

// Tell the central manager (cm) to scan for the heart rate service
[cm scanForPeripheralsWithServices:[NSArray arrayWithObject:heartRate] options:scanOptions]

Ответ 2

в Bluetooth есть "Сервисы". Устройство публикует службы 1..N, и каждая служба имеет характеристики 1..M. Каждая служба имеет уникальный идентификатор, называемый UUID.

Например, Bluetooth-датчик сердечного ритма, который предлагает услугу "ЧСС", публикует сервис с UUID 0x180D.

(больше сервисов здесь)

Поэтому, когда вы выполняете поиск, вы должны указать UUID в качестве критериев, указав, какую службу искать.

Ответ 3

Вы должны взглянуть на один из примеров. Имеет соответствующую строку:

[manager scanForPeripheralsWithServices:[NSArray arrayWithObject:[CBUUID UUIDWithString:@"180D"]] options:nil];

(Я знаю, что это пример Mac OS X, но API-интерфейс iOS CoreBlubox очень похож.)

CBUUID идентифицирует сервисы, которые вас интересуют, а не устройства. Стандартные службы имеют 16-битный UUID, в данном случае 0x180d для монитора сердечного ритма или, возможно, 0x180a для информации об устройстве, в то время как проприетарные службы имеют 128-битный UUID (16 байт).

Большинство устройств реализуют службу информации об устройстве, поэтому, если вы просто ищете какое-либо устройство, вы можете попробовать [CBUUID UUIDWithString:@"180A"].

Ответ 4

Попробуйте дать это при сканировании устройств

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:NO], CBCentralManagerScanOptionAllowDuplicatesKey, nil];

 [self.centralManager scanForPeripheralsWithServices:nil options:options];

вы сможете получить список устройств в didDiscoverPeripheral методе делегирования

Ответ 5

Сохраняйте спокойствие и используйте https://github.com/l0gg3r/LGBluetooth

Все, что вам нужно сделать

[[LGCentralManager sharedInstance] scanForPeripheralsByInterval:4
                                                         completion:^(NSArray *peripherals) {
     }];