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

时间:2012-12-13 09:51:22

标签: iphone ios bluetooth core-bluetooth bluetooth-lowenergy

我正在尝试在iOS 5.0中引入Core Bluetooth framework。根据StackOverflow本身的许多线程(one of many):

  1. 核心蓝牙框架可用于与 ANY 进行通信 硬件,具有蓝牙低功耗(4.0)硬件支持。
  2. 如果您愿意,我们可以忘记Made for iPhone / iPod(MFI)计划 使用核心蓝牙技术。
  3. 我有iPhone 5,iPhone 4S,谷歌Android Nexus 7,我相信至少前两个有BLE的硬件支持。

    我的问题是

    好吧,我在iPhone 4S / iPhone 5上尝试了以下代码,但是它无法扫描并发现附近的iPhone5 / iPhone 4S。我可以确认,这两款设备的蓝牙都已打开。委托方法didDiscoverPeripheral永远不会被调用。 可能是什么原因?我错过了什么吗?

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

    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
    

3 个答案:

答案 0 :(得分:12)

正如spamsink所评论的那样,一个设备需要充当外围设备,一个设备需要作为中心才能进行通信。

Apple有一个伟大的sample app可以做到这一点。另外,请查看WWDC 2012会话703 - CoreBluetooth 101和705 - Advanced CoreBluetooth,以获得有关CoreBluetooth框架使用的精彩解释和示例。

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

答案 1 :(得分:3)

嗯,我对蓝牙低功耗(BLE)一般的理解很差。正如所接受的答案所指出的那样,一个设备必须充当中心,而另一个设备必须充当通信的外围设备

iOS到iOS和iOS到Mac OS BLE通信的一个很好的示例源代码是here

需要考虑的一些要点

    iOS 5.0上的
  1. - &gt; iPhone只能充当中央,所以沟通 不能在2台iOS设备之间使用。
  2. iOS 6.0上的
  3. - &gt; iPhone也可以作为外围设备..所以 要进行通信,必须运行至少一个设备 iOS 6.0(可能稍后)。
  4. 首款添加了BLE硬件的iPhone设备是iPhone 4S。即便如此 iPhone 4可以运行iOS 5,无法进行BLE通信。
  5. 一些信息..

答案 2 :(得分:1)

如果你在didUpdateState委托中调用scanForPeripherals函数,那么它可以工作,因为委托函数不能返回。