4

2 つの iOS デバイス間で Bluetooth 接続をセットアップしようとしています。アイデアは、1 つのデバイスがサービスを提供し、複数のデバイスがそれに接続するというものです。

デバイス A (サービス): ユーザーがプレゼンテーションをスライドします。

デバイス B (複数のクライアント): ユーザーはプレゼンテーションを視聴し、対話はありません

私の理解では、サービスを提供するものはそれをアドバタイズし、CBPeripheralManager を作成して CBPeripheralManagerDelegate -> デバイス A を実装することにより、それぞれ周辺機器にする必要があります。

反対側には、CBCentralManager を使用して周辺機器をスキャンし、CBCentralManagerDelegate を実装する複数の中央デバイスがあります。接続が確立された後、CBPeripheral クラスと CBPeripheralDelegate -> デバイス B を使用して、周辺機器に読み取りおよび書き込み要求を送信します。

そして今、私は混乱しています:私が理解したことから、デバイスAはデバイスBに情報を直接送信できず、接続が確立されたか失われたかさえ認識しません. ただし、クライアント (デバイス B) はデータの読み取りと書き込みができ、接続と切断の通知を受け取ることができます。

だから私の最初のアイデアは、役割を交換することでした. これで、中央デバイスは、サービスを使用したいことをアドバタイズするデバイスをスキャンすることによってサービスを提供し (?!?)、複数の周辺機器を 1 つの中央デバイスに接続できます。すでに間違っているように聞こえますよね?ここで問題が発生します。接続が確立または切断された場合、周辺機器 (プレゼンテーションを視聴するユーザー) には通知が届かなくなりました (aaahhhhh)。

ここで質問があります: iOS デバイスを周辺機器にして、接続と切断 (距離などによる切断を含む必要があります) を認識する良い方法はありますか?

追加: WWDC 2012 セッション 705 (プレゼンテーション スライドへのリンク)では、メソッド central:didConnect および central:didDisconnect が言及されています。しかし、CBPeripheralManagerDelegate の iOS 7 ベータ版ドキュメントでも、メソッドについては言及されていません。多分これは行き止まりで、Apple は今私を笑っています...

助けてくれてありがとう!

ベンジャミン

4

2 に答える 2

5

デバイス A (プレゼンター) を周辺機器にしてサービスをアドバタイズし、デバイス B (視聴者) をセントラルとして周辺機器のサービスにサブスクライブする必要があります。

CBPeripheralManagerDelegate を使用して、セントラルがペリフェラルに接続したときに通知を受け取ることができます。CBPeripheralManager デリゲート メソッドのドキュメントは次のとおりです。CBPeripheralManagerDelegate プロトコル リファレンス

これは、セントラル (デバイス B、ビューアー) が周辺機器 (デバイス A、プレゼンター) に接続されたことを認識するために実装する必要があるメソッドです。

- (void)peripheralManager:(CBPeripheralManager *)peripheral central:(CBCentral *)central didSubscribeToCharacteristic:(CBCharacteristic *)characteristic

これは、中央 (デバイス B、ビューアー) が周辺機器 (デバイス A、プレゼンター) から切断されたときに認識する必要がある方法です。

- (void)peripheralManager:(CBPeripheralManager *)peripheral central:(CBCentral *)central didUnsubscribeFromCharacteristic:(CBCharacteristic *)characteristic

サブスクライブしたセントラル (デバイス B、ビューア) にスライドが変更されたことを通知する必要がある場合は、このメソッドを使用します (newValue は、スライド番号など、プレゼンテーション内の更新された位置を示す何らかのインジケータになります)。

[self.peripheralManager updateValue:newValue forCharacteristic:yourCharacteristic onSubscribedCentrals:nil];

セントラルとペリフェラルの両方として機能するデバイスとの Bluetooth LE 共有の簡単なデモを見たい場合は、次のプロジェクトをチェックしてください: SimpleShare

それが役立つことを願っています! 何かを明確にできるかどうか教えてください。

ローラ

于 2014-01-14T08:01:50.140 に答える