2016-01-22 211 views
0

是否可以配置蓝牙设备,使我的应用在接近时自动连接到它 - 无需配对等?自动连接到蓝牙设备而无需配对

该设备将被定制,应用程序将由我写,我首先必须定义一些规格。如果设备中有一个选项,只要它接近我的(打开的)应用程序,这两个应用程序都会自动连接,而无需任何设置过程,那将会很棒。

+0

这蕴藏着安全风险 - 你可以通过具有固定密码配对过程自动化。但是这在过去的w/default 0000代码中造成了很多安全问题。 – SmokeDispenser

+0

,但是有可能使用独特的密码构建设备,并且如果该应用程序知道该密码,它会自动连接而不进行任何配对? – swalkner

+0

从技术上来说,配对仍然会发生,但用户交互可能不必要。然而,我不知道苹果API是否允许用户交互配对。 – SmokeDispenser

回答

0

当然可以。如果设备是定制的,你知道它的特点

下面

代码(TRANSFER_SERVICE_UUID - GUID您的设备):

_centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil]; 


- (void)centralManagerDidUpdateState:(CBCentralManager *)central { 
// You should test all scenarios 
if (central.state != CBCentralManagerStatePoweredOn) { 
    [self stop]; 
    return; 
} 

if (central.state == CBCentralManagerStatePoweredOn) { 
    // Scan for devices 
    [_centralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:TRANSFER_SERVICE_UUID]] options:@{ CBCentralManagerScanOptionAllowDuplicatesKey : @YES }]; 
    NSLog(@"Scanning started"); 

    if(_delegate) 
    { 
     if([_delegate respondsToSelector:@selector(CB_changedStatus:message:)]) 
     { 
      [_delegate CB_changedStatus:CBManagerMessage_ScanningStarted message:@"Scanning started"]; 
     } 
    } 
    } 
} 

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

NSLog(@"Discovered %@ at %@", peripheral.name, RSSI); 

if (_discoveredPeripheral != peripheral) { 
    // Save a local copy of the peripheral, so CoreBluetooth doesn't get rid of it 
    _discoveredPeripheral = peripheral; 



    // And connect 
    NSLog(@"Connecting to peripheral %@", peripheral); 

    if(_delegate) 
    { 
     if([_delegate respondsToSelector:@selector(CB_changedStatus:message:)]) 
     { 
      [_delegate CB_changedStatus:CBManagerMessage_ConnectingToPeripheral message:[NSString stringWithFormat:@"Connecting to peripheral %@", peripheral]]; 
     } 
    } 

    [_centralManager connectPeripheral:peripheral options:nil]; 

    } 
}