我正在尝试iOS 5.0 中引入的Core Bluetooth 框架。根据StackOverflow 本身的许多线程(其中之一):
- 核心蓝牙框架可用于与任何 具有蓝牙低功耗 (4.0) 硬件支持的硬件进行通信。
- 如果您使用的是核心蓝牙技术,我们可以忘记 Made For iPhone/iPod (MFI) 程序。
我有 iPhone 5、iPhone 4S、Google Android Nexus 7,而且我确信至少前 2 个硬件支持 BLE。
我的问题是
好吧,我在我的 iPhone 4S/iPhone 5 上尝试了下面给出的代码,但它未能扫描并找到附近的 iPhone5/iPhone 4S。我可以确认,两台设备都打开了蓝牙。委托方法didDiscoverPeripheral
永远不会被调用。可能是什么原因?我错过了什么吗?
这是我的代码(精简为一个小型测试项目)。
视图控制器.h
@interface ViewController:UIViewController<CBCentralManagerDelegate, CBPeripheralDelegate{
}
@property (strong, nonatomic) CBCentralManager *mCentralManager;
@end
视图控制器.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