2017-06-19 2 views
1

Je construis une application iOS avec Xamarin et MvvmCross l'utilisation requise de Bluetooth LE. Je suis en train d'utiliser ce plugin:ACR Reactive BluetoothLE Plugin État non valide lors du démarrage du serveur

https://github.com/aritchie/bluetoothle

Voici mon code:

var server = CrossBleAdapter.Current.CreateGattServer(); 
await server.Start(new AdvertisementData()); // throws exception 

Il jette une exception lorsque vous essayez de démarrer le serveur:

{System.ArgumentException : Invalid State - Unknown à Plugin.BluetoothLE.Server.GattServer.Start (Plugin.BluetoothLE.Server.AdvertisementData adData) [0x0005f] dans < 4281c4bd57f24525b20baae1afdf610b>: 0

Apparemment, ce plug-in est facile à utiliser si je dois manquer quelque chose d'évident?

Répondre

0

J'ai trouvé une solution. Au lieu de placer le code dans mon projet de base, je l'ai placé à l'intérieur du projet iOS lui-même, dans une fonction ViewDidAppear, et placé une variable globale dans ma classe UIViewController:

private IGattServer server = CrossBleAdapter.Current.CreateGattServer();

Je pense que vous avez besoin d'accéder à la adaptateur avec le thread approprié, ou au moment approprié (après l'autre initialisation), d'où la raison pour laquelle il se plantait avant. Je n'ai pas trouvé d'endroit approprié pour mettre cela dans mon projet Core, donc je ne suis pas sûr de devoir mettre ce code dans chaque plateforme. De toute façon, voici une solution pour quelqu'un d'autre avec ce problème.

1

Cette exception indique que le matériel est dans un état non valide ou l'initialisation et peut être vu ici: https://github.com/aritchie/bluetoothle/blob/master/Plugin.BluetoothLE.Apple.Shared/Server/GattServer.cs#L74

if (this.manager.State != CBPeripheralManagerState.PoweredOn) 
    throw new ArgumentException("Invalid State - " + this.manager.State); 

Je crois que ce bogue dans le code tel qu'il n'attend pas le délégué pour signaler que l'Etat a changé.

+0

Je crois que j'y accédais au mauvais moment ou au mauvais moment, bloquant l'initialisation importante qui devait être faite en premier. – Darius