2017-04-05 2 views
4

Il existe donc un moyen de surveiller les changements d'état de CBCentralManager via centralManagerDidUpdateState(). Mais existe-t-il un appel de méthode similaire pour surveiller les changements d'état pour CBPeripheral? Je n'ai pas pu trouver quoi que ce soit d'exposé dans la bibliothèque CoreBluetooth, et je veux appeler une fonction chaque fois que CBPeripheralState change. À l'heure actuelle, tout ce que j'ai est une instruction switch qui vérifie l'état de la périphérie, mais elle revient toujours soit connectée, soit déconnectée. Comment accéder aux boîtiers de connexion/déconnexion? J'ai essayé de placer mon instruction switch dans diverses parties de mon code, de la méthode bleInit(), à startScanning(), connectToPeripheral(), etcSurveiller les changements d'état CBPeripheral

switch(peripheral.state){ 
case .disconnected: 
    print("disconnected") 
case .connecting: 
    print("connecting") 
case .connected: 
    print("connected") 
case .disconnecting: 
    print("disconnecting") 
default: break 
} 

Répondre

2

Les états de connexion et de déconnexion sont des états transitoires. Votre connexion ne sera dans ces états que pour un temps très court; c'est pourquoi vous ne verrez jamais ces états.

Si votre application joue le rôle de centrale, l'état de connexion du périphérique est notifié via les méthodes CBCentralManagerdidConnect et didDisconnectPeripheral.

+0

Je peux faire fonctionner didConnect et didDisconnect et les états des périphériques sont affichés comme prévu. Cependant, pour récapituler, je ne serai pas en mesure d'être informé des états de connexion et de déconnexion parce qu'ils se produisent si rapidement? Par curiosité, pourquoi ces cas sont-ils exposés dans l'API? Quel usage serviraient-ils normalement? –

+0

J'imagine Apple les utilise dans le suivi d'état CoreBluetooth en interne. Je ne devrais probablement pas dire que vous ne les verrez jamais, il est extrêmement improbable que vous listiez la variable status au moment où le périphérique est dans l'un de ces états. – Paulw11

+0

Cela peut être différent du sujet, mais existe-t-il un moyen de vérifier la cause de la déconnexion Périphérique (sans prendre en compte la distance ou la force du signal), que ce soit du côté de l'application ou du matériel? Je crois que j'ai lu quelque part que Apple ne temporise pas les connexions tant que l'application est au premier plan. –

-1
+0

C'est ce que je pensais aussi, mais à ma connaissance, contrairement à la convention de nommage attendue, CBCentralManager gère CBPeripherals, et CBPeripheralManager gère CBCentral. CBCentralManager gère les périphériques découverts/connectés et CBPeripheral est un objet d'instance qui représente un périphérique. CBPeripheralManager gère les services publiés dans le périphérique à annoncer, tandis que CBCentral est un objet instance représentant le périphérique central connecté au périphérique. –