iOS CoreBluetooth : centralManager:didConnectPeripheral / didFailToConnectPeripheral: pas appelé
Je suis en tirant mes cheveux de ces problèmes. Je suis en train de se connecter à BLE appareils, ne peut pas voir ce que j'ai fait de mal dans mon code ci-dessous.
- (void)viewDidLoad {
[super viewDidLoad];
//Do any additional setup after loading the view, typically from a nib.
_cm = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
//Dispose of any resources that can be recreated.
}
+ (NSString*)UUIDString:(CFUUIDRef)uuid {
CFStringRef string = CFUUIDCreateString(NULL, uuid);
return (__bridge_transfer NSString*)string;
}
- (void)centralManagerDidUpdateState:(CBCentralManager *)central {
if (central.state == CBCentralManagerStatePoweredOn) {
[self scanForPeripherals];
}
}
- (void)centralManager:(CBCentralManager *)central
didDiscoverPeripheral:(CBPeripheral *)peripheral
advertisementData:(NSDictionary *)advertisementData
RSSI:(NSNumber *)RSSI {
// NSLog(@"Received peripheral : \n%@", peripheral);
// NSLog(@"Adv data : %@", advertisementData);
[peripheral setDelegate:self];
[central connectPeripheral:peripheral options:nil];
[peripheral readRSSI];
}
- (int)scanForPeripherals {
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:NO], CBCentralManagerScanOptionAllowDuplicatesKey,
nil];
[_cm scanForPeripheralsWithServices:nil options:options];
return 0;
}
- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral {
NSLog(@"didConnectPeripheral");
}
- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error {
NSLog(@"didDisconnectPeripheral");
}
- (void)centralManager:(CBCentralManager *)central didFailToConnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error {
NSLog(@"failed to connect");
}
- (void)peripheral:(CBPeripheral *)peripheral didReadRSSI:(NSNumber *)RSSI error:(NSError *)error {
NSLog(@"didReadRSSI");
}
Ces appareils ne sont pas de mon propre chef. Je ne sais pas sa proximité de l'UUID, mais autant que je sache, Il ne sera pas nécessaire de se connecter via CoreBluetooth droit?
Tous les périphériques sont détectés dans didDiscoverPeripheral:
, dans le sélecteur j'ai essayé de les relier entre eux. Mais il n'y a rien qui vient après.
Suis-je attendre un dialogue avec l'Appariement Demande de Mot de passe quand j'ai appelé pour didDiscoverPeripheral:
?
Si oui, je ne vois pas de dialogue, pourquoi est-ce?
De pomme de documents, Il a clairement déclaré qu'après avoir essayé de se connecter à un périphérique, vous devriez obtenir ce que l'on appelle soit didConnectPeripheral
ou didFailToConnectPeripher
mais j'en ai trouvé aucun.
Toute pensée? J'ai essayé pendant presque une semaine maintenant.
Apprécier chaque aide, merci.
- Avez-vous un appel à
didDiscoverPeripheral
? Avez-vous essayé de supprimer l'appel à[peripheral readRSSI]
qui suit immédiatement votre demande de connexion? Vous ne devriez pas question que la demande jusqu'à ce que vous êtes connecté. J'ai toujours penser que les personnes essayez le gratuitement LightBlue de l'app store comme un test pour voir si leur appareil est de la publicité et est connectable - Oui j'ai essayé, Il y avait la première version de ce code, il est, mais ne rien faire, à découvrir et à essayer de se connecter, mais après
connectPeripheral
exécuté rien ne se passe. - Essayez LightBlue - de cette façon, vous pouvez au moins confirmer que le matériel est connectable. Aussi essayez de stocker les périphériques que vous connectez dans une propriété de sorte qu'il n'est pas sorti
- Essayé, Tous d'entre eux montre dans LightBlue, Aucun service n'a été affichée pour tous les périphériques. Il y en a 2 Le Estimotes BLE et les 2 autres de mes pays personnalisée BLE*. S'interrogeant sur la estimotes BLE au succès de la connexion, mais après quelques secondes, LightBlue dit "Déconnecté d'alerte", et Il y a un texte en rouge, en disant: "les Données sont obsolètes", pour un autre 2 appareils interrogatoire de divulguer une autre page comme le estimotes et rien de plus
- Peut aider: stackoverflow.com/questions/28167804/...
Vous devez vous connecter pour publier un commentaire.
Si vous n'avez pas une certaine façon de conserver la
peripheral
objet qui est livré àdidDiscoverPeripheral
puis il est sorti une fois ce délégué sortie de la méthode et vous ne serez pas obtenir une connexion.Je vous suggère d'ajouter une propriété à la piste de découverte des périphériques
initialiser cette
viewDidLoad
ouinit
Puis ajouter le périphérique dans
didDiscoverPeripheral
didDiscoverPeripheral
était faible référencés. Je n'ai pas trouver quelque chose à dire à propos de cette apple docs ou c'était moi, ignorer cette partie? De toute façon, merci beaucoup!!!.C'est le Swift version.