2017-06-19 7 views
1

私は、XamarinとMvvmCrossを使ってiOSアプリケーションをビルドする際に、Bluetooth LEを使用する必要があります。私はこのプラグインを使用しようとしています:ここでACRリアクティブBluetoothLEプラグインサーバ起動時に無効な状態

https://github.com/aritchie/bluetoothle

は私のコードです:

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

サーバを起動しようとすると、それが例外をスロー:

{System.ArgumentExceptionの:無効な状態 - 不明で Plugin.BluetoothLE.Server.GattServer.Start (Plugin.BluetoothLE.Server.AdvertisementData adData)[0x0005f] < 4281c4bd57f24525b20baae1afdf610b>:0

どうやらこのプラグインは、私は何かを明らかに不足しているされている必要があり使いやすいのですか?

答えて

0

解決策が見つかりました。代わりに私のコアプロジェクトにコードを配置するのではなく、私はViewDidAppear機能では、iOSのプロジェクト自体の内部にそれを置き、そして私のUIViewControllerクラスでグローバル変数を置い:

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

私はあなたがアクセスする必要があると思いますアダプタを適切なスレッドで、または適切な時に(他の初期化の後に)、なぜそれが以前にクラッシュしていたのでしょうか。これを私のコアプロジェクトに入れる適切な場所を見つけることができなかったので、このコードを各プラットフォームに配置する必要があるかどうかはわかりません。とにかく、ここにこの問題を持つ他の誰かのための解決策です。

1

その例外は、ハードウェアが無効または初期化状態であり、ここで見ることができることを示しています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); 

私はそれはそれを通知するために、デリゲートを待たないと、これはコードのバグであると考えてい国家は変わった。

+0

間違った時間やスレッドでアクセスしていたと思うので、最初に行う必要がある重要な初期化がブロックされています。 – Darius

関連する問題