2个iOS设备之间的蓝牙连接

我正在尝试在iOS 5.0中引入的核心蓝牙框架 。 根据StackOverflow本身的许multithreading( 很多 ):

  1. 核心蓝牙框架可用于与具有蓝牙低功耗(4.0)硬件支持的任何硬件进行通信。
  2. 如果您正在使用Core蓝牙技术,我们可以忘记Made For iPhone / iPod(MFI)程序。

我有一个iPhone 5,iPhone 4S,谷歌Android Nexus 7与我,我敢肯定,至less有第一个2硬件支持BLE。

我的问题是

那么,我试着在我的iPhone 4S / iPhone 5上给定的代码下面,但它没有扫描,并find附近的iPhone5 / iPhone 4S。 我可以确认,两个设备都已经打开了蓝牙。 didDiscoverPeripheral方法didDiscoverPeripheral永远不会被调用。 可能是什么原因? 我错过了什么吗?

这是我的代码(剥离到一个小testing项目)。

ViewController.h

 @interface ViewController:UIViewController<CBCentralManagerDelegate, CBPeripheralDelegate{ } @property (strong, nonatomic) CBCentralManager *mCentralManager; @end 

ViewController.m

 @implementation ViewController @synthesize mCentralManager; - (void)viewDidLoad{ [super viewDidLoad]; mCentralManager = [[CBCentralManager alloc]initWithDelegate:self queue:nil]; [self scanForPeripherals]; } - (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI { NSLog(@"Received periferal :%@",peripheral); } - (int) scanForPeripherals { if (self.mCentralManager.state != CBCentralManagerStatePoweredOn) { NSLog(@"self.mCentralManagerState : %d",self.mCentralManager.state); return -1; } //Getting here alright.. bluetooth is powered on. NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:NO], CBCentralManagerScanOptionAllowDuplicatesKey, nil]; //Documentation says passind nil as device UUID, scans and finds every peripherals [self.mCentralManager scanForPeripheralsWithServices:nil options:options]; return 0; } @end 

正如Spamsink评论的那样,一个设备需要作为外设,而其中一个作为中心才能进行通信。

苹果有一个非常棒的示例应用程序 。 此外,请查看WWDC 2012会话703 – CoreBluetooth 101和705 – 高级CoreBluetooth,以获取有关CoreBluetooth框架使用情况的详细说明和示例。

另外请注意,要使设备处于外设模式,需要将其更新到iOS 6.0或更高版本。

那么,我对蓝牙低功耗(BLE)将军的了解很差。 正如接受的答复所指出的, 一个设备必须充当中央,另一个必须充当通信的外围设备

iOS到iOS和iOS到Mac OS BLE通信的一个很好的示例源代码就在这里 。

一些要考虑的重要问题

  1. 在iOS 5.0 – > iPhone只能作为中央,所以2个iOS设备之间的通信是不可能的。
  2. 在iOS 6.0上 – > iPhone也可以作为外围设备。因此,为了进行通信,至less有一个设备必须在iOS 6.0上运行(可能更晚)。
  3. 首先添加了BLE硬件的iPhone设备是iPhone 4S。 所以,即使iPhone 4可以运行iOS 5,BLE通信也是不可能的。

那么一些信息..

如果您在didUpdateState委托中调用scanForPeripherals函数,那么它的工作原理是委托函数无法返回。