J'essaie le framework Core Bluetooth introduit dans iOS 5.0. Selon beaucoup de threads ( un de beaucoup ) sur StackOverflow lui-même:
J'ai un iPhone 5, iPhone 4S, Google Android Nexus 7 avec moi, et je suis sûr qu'au less 2 premiers a le support matériel pour BLE.
Eh bien, j'ai essayé ci-dessous le code donné sur mon iPhone 4S / iPhone 5, mais il a échoué à numériser et à find l'iPhone5 / iPhone 4S assis à proximité. Je peux confirmer, les deux appareils avaient bluetooth allumé. La méthode déléguée didDiscoverPeripheral
n'a jamais été appelée. Quelles pourraient être les raisons? Est-ce que je manque quelque chose?
Ceci est mon code (dépouillé d'un petit projet de test).
@interface ViewController:UIViewController<CBCentralManagerDelegate, CBPeripheralDelegate{ } @property (strong, nonatomic) CBCentralManager *mCentralManager; @end
@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
Comme l'a commenté Spamsink, un périphérique doit agir comme périphérique, et un comme central pour qu'ils puissent communiquer.
Il y a un excellent exemple d'application d'Apple qui fait cela. En outre, consultez les sessions WWDC 2012 703 – CoreBluetooth 101 et 705 – Advanced CoreBluetooth pour une excellente explication et des exemples d'utilisation du framework CoreBluetooth.
Notez également que pour que le périphérique soit en mode périphérique, il doit être mis à jour vers iOS 6.0 ou version ultérieure.
Eh bien, ma compréhension de Bluetooth Low Energy (BLE) général était pauvre. Comme l'a souligné la réponse acceptée, un appareil doit agir comme central et l'autre doit agir comme périphérique pour que la communication ait lieu .
Un bon exemple de code source pour la communication iOS vers iOS et iOS vers Mac OS BLE est ici .
Quelques points importants à considérer
Eh bien quelques informations ..
Si vous appelez la fonction scanForPeripherals dans le délégué de didUpdateState, cela fonctionne car les fonctions déléguées ne peuvent pas returnner.