2016-02-25 7 views
5

私は、私のアプリとそのウィジェットの中央モードで私の周辺機器と永続的なBLE接続を維持したいと思います。技術的にも可能ですか?iOS CoreBluetooth:アプリとウィジェットの同じターゲット周辺機器へのアクティブな接続は同時にですか?

理由は次のとおりです:アプリに接続が確立されたら、それをバックグラウンドに送信してtoday-widgetを開きます - ウィジェットは接続された周辺機器で動作し続ける必要があります。そして、その逆:今日のウィジェットを非表示にしてアプリを起動すると、アプリは既存の接続を引き続き使用する必要があります。

答えて

2

バックグラウンドでBluetooth機能を有効にすると、BLEイベントをバックグラウンドで処理し続けることができます。メインプロジェクトファイルを選択してターゲットを選択し、CapabilitiesタブでBackground Modeをオンにして、「Bluetooth LEアクセサリを使用」を有効にします。

アプリがバックグラウンドの場合でも、あなたのメインアプリでは、BLEイベントを処理する機会があります。

BLEイベントがアクションを開始するため、実行するコードを、didUpdateValueForCharacteristicなどのデリゲートメソッド内にバックグラウンドで配置してください。

コードは、CBCentralManagerを初期化したときに指定したキューで実行されます。

ウィジェットとアプリがBLE接続を共有できません。アプリケーションとウィジェットの間で、Appleが提案する方法(NSUserDefaultsまたはキー値観測)を使用して通信することができます。また、ウィジェットから別のBLE接続を作成し、それを介して通信することもできます。

+0

マーカス、答えに感謝します。良いアプローチが、私の質問は少し異なります:私たちは今日のウィジェットで、アプリで確立されているBLE接続を使用することはできますか?およびその逆。例:アプリを起動し、BLEに接続し、アプリを非表示にし、ウィジェットを起動して接続を続行します。 – brigadir

+1

あなたの質問ではないので、答えを絞り込んでください。いいえ、ウィジェットとアプリは接続を共有できません。あなたは、アップルが提案する方法( 'NSUserDefaults'またはキー値観測)を使ってアプリとウィジェットの間でやり取りすることができます。あるいは、ウィジェットから別のBLE接続を作成し、それを介して通信することもできます。 –

+0

マーカス、バックグラウンドでBLEを使用するための説明とアイデアを感謝します。私はそれを試してみる... – brigadir

0

はい可能です。 CBCentralManagerのretrieveConnectedPeripheralsWithServices:を見てください。

基本的に、この方法は、iOSデバイス全体に接続されているすべての周辺機器を収集する方法です。 iOSデバイスで2番目のアプリを起動するときに使用します。

アプリがバックグラウンドの場合、BLE接続は有効なままなので、アプリ1を非表示にしてアプリ2を起動し、この方法を使用して興味のある周辺機器を特定し、最初のアプリ。

+0

2番目のアプリで 'retrieveConnectedPeripheralsWithServices'の後に、私は参照で述べたように、検索された周辺機器を接続する必要があります。その場合、最初のアプリの既存の接続は存続しますか?はいの場合、データ転送は2つの同時接続でどのように実行されますか? – brigadir

+0

はい、既存の接続はそのまま残ります。私はパフォーマンスがよく分からない。 –

関連する問題