ios - tiene - Resolver ''CBConcreteCentralManager no está encendido'' en Core Bluetooth en MonoTouch
iphone 10 tiene nfc (1)
Actualmente estoy intentando hacer funcionar una muestra de Bluteooth.
Estoy usando esta muestra como referencia - http://developer.apple.com/library/mac/#samplecode/HeartRateMonitor/Listings/HeartRateMonitor_HeartRateMonitorAppDelegate_m.html#//apple_ref/doc/uid/DTS40011322-HeartRateMonitor_HeartRateMonitorAppDelegate_m-DontLinkElementID_4
Bluetooth está habilitado en mi dispositivo.
He intentado usar código como:
_manager = new CBCentralManager ();
_manager.DiscoveredPeripheral += HandleDiscoveredPeripheral;
_manager.ConnectedPeripheral += HandleConnectedPeripheral;
_manager.DisconnectedPeripheral += HandleDisconnectedPeripheral;
y he intentado escribir mi propio delegado heredando de CBCentralManagerDelegate
pero cuando llamo a StartScan
void StartScan ()
{
var spp = Guid.Parse("00001101-0000-1000-8000-00805f9b34fb");
_manager.ScanForPeripherals(new [] { spp }, null);
}
entonces veo un error:
bluetooth1[1210:907] CoreBluetooth[WARNING] <CBConcreteCentralManager: 0x9beea0> is not powered on
Buscando este error, he encontrado solo un par de visitas:
- ¿Qué causa CBCentralManagerStateUnknown en iOS?
- http://www.zitao.org/wiki/development-log/le-zeng/2012-Nov-week1-devnote.html
Pero ninguno de estos es particularmente útil ...
Traté de retrasar el inicio hasta que el estado cambió:
void HandleUpdatedState (object sender, EventArgs e)
{
// more to do here....
Console.WriteLine("State updated " + e.ToString());
switch (_manager.State) {
case CBCentralManagerState.PoweredOn:
_manager.DiscoveredPeripheral += HandleDiscoveredPeripheral;
_manager.ConnectedPeripheral += HandleConnectedPeripheral;
_manager.DisconnectedPeripheral += HandleDisconnectedPeripheral;
StartScan();
break;
case CBCentralManagerState.Unauthorized:
break;
}
}
- pero esto nunca parece ser llamado.
También intenté ejecutar la muestra xcode, pero la fuerza no está conmigo hoy ...
¿Alguien tiene alguna idea de lo que significa CBConcreteCentralManager: 0x9beea0 y cómo solucionarlo aquí?
Respuesta: Para superar esto en MonoTouch tuve que usar un constructor diferente:
CBCentralManager(_delegate, MonoTouch.CoreFoundation.DispatchQueue.CurrentQueue)
Cuando cambié a eso, comenzó a funcionar ...