問題タブ [cbperipheralmanager]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
104 参照

objective-c - 特性に書き込むためにすべての CBATTRequests を満たす必要がありますか?

私が受け取ったとき

すべてのリクエストを満たし、最初のリクエストにのみ成功して応答する必要があるのか​​ 、それとも最初の書き込みリクエストのみを実行して最初のリクエストに成功して応答する必要があるのか​​ は不明です。

デリゲートメソッドを受け取ったら、最初にAppleのメモに従います

複数のリクエストを 1 つのリクエストと同様に扱います。個々のリクエストを満たすことができない場合は、それらのいずれも満たすべきではありません。代わりに、respondToRequest:withResult: メソッドをすぐに呼び出して、失敗の原因を示す結果を提供してください。

することで

しかし、一度これを通過し、すべての要求を満たすことができるとわかった場合、すべての要求を実際に反復処理し、それぞれの特性の値を書き込んで、いつ私が''最初のリクエストに応答するだけで完了ですか、それとも最初のリクエストを実行して成功を返す必要がありますか?

0 投票する
0 に答える
809 参照

ios - CBPeripheralManager を使用して複数の独立した BLE サービスをアドバタイズする

2 つの方法があり、それぞれがペリフェラル マネージャーにサービスを追加します。didAddServiceコールバックを取得したら、[manager startAdvertisingServices:]追加されたサービスでメソッドを使用します (したがって、キーの値として使用される配列にCBAdvertisementDataServiceUUIDsKeyは、1 つまたは 2 つのサービス UUID が含まれます)。

2 番目のサービスを追加して両方をアドバタイズしようとすると、常にエラーが発生しますAdvertising has already started.

新しいサービスを使用して追加しようとしまし[manager stopAdvertising]たが、stopAdvertising メソッドは非同期であるため、まだ失敗することがあります (startAdvertisingServicesもう一度呼び出すまでに広告を停止していません)。

それらを個別に宣伝/読み取り/書き込みすることに問題はありません。stopAdvertising を呼び出した後に待機すると、それらをまとめて宣伝を開始できますが、それはハックのようです。

これを安全に行うために考えられる方法は、ペリフェラル マネージャーのプロパティで KVO を使用し、isAdvertising各サービスをアドバタイズする必要があるかどうかのフラグを保持することです。これにより、アドバタイジングがいつ停止し、安全に再開できるかを正確に知ることができます。また、新しいサービスを追加するためだけに広告を開始および停止した場合、これが現場のセントラルに影響を与えるかどうかもわかりません.

ペリフェラル マネージャを使用して複数のサービスをアドバタイズする適切な方法は何ですか?

0 投票する
1 に答える
1235 参照

ios - iOS の Bluetooth - 周辺機器が見つからない場合にスキャンを停止するタイミング

iOS で「scanForPeripheralsWithServices」を使用しており、目的のデバイスに正常に接続しています。

しかし、Apple のドキュメントでは、有効な周辺機器が見つからない場合については触れていません。利用可能な周辺機器がないと判断し、スキャンを停止し、アプリ ユーザーに通知するためのベスト プラクティスは何ですか?

0 投票する
1 に答える
1396 参照

ios - iOS で Bluetooth LE サービス アドバタイズメントを検出できない

2 つの iOS アプリを作成しました。1 つはサービスをアドバタイズする Bluetooth LE ペリフェラル、もう 1 つはアドバタイズされたサービスをスキャンする Bluetooth LE セントラルです。ペリフェラルは iPhone5s で実行され、セントラルは iPad Mini で実行されます。最初に、特定の宣伝されたサービスをスキャンするようにセントラルを設定しましたが、後で任意のサービスをリッスンするように変更しました。どちらの場合でも、中心として機能する iPad Mini アプリは、宣伝されているサービスをまったく検出しません。周辺機器マネージャーをアドバタイズするようにセットアップする方法に問題があるのか​​、中央マネージャーをスキャンするようにセットアップする方法に問題があるのか​​ 、それともデバイス構成の問題なのかはわかりません。これを機能させるために実行できる提案またはテストを提供してください。

以下は、周辺機器として機能する iPhone5s アプリに関連するコードです。

必要なデリゲート メソッドは次のとおりです。注:デリゲート メソッドperipheralManagerDidUpdateStateが起動し、「CoreBluetooth BLEハードウェアの電源がオンになり、準備ができている」ことを示します(中央側でも同じです)。デリゲート メソッドperipheralManager:didAddService:error がエラーなしで起動します (以下の出力を参照)。また、デリゲート メソッドperipheralManagerDidStartAdvertising:error がエラーなしで起動します)。didAddService から出力されたサービス情報は次のとおりです。

CBPeripheralManager Delegate メソッド (すべてのコードについては申し訳ありませんが、完成させようとしています。):

iPad Mini で実行される関連する中心的なコードは次のとおりです。

そして、これは Central デリゲート メソッドの 1 つです。centralManagerDidUpdateState: を除いて、どのデリゲート メソッドも起動しません。

最後に、私のデバイスで BLE が動作するかどうか疑問に思います。iPhone と iPad Mini にいくつかの異なる iBeacon アプリをロードして、2 つのデバイスが iBeacon (一方は送信、もう一方は受信) を認識できるかどうかを確認しましたが、iBeacon も検出されませんでした。2台のiPhoneでも試してみました。また、Bluetoothをオフにしてからオンにしました。また、デバイスの電源をオフ/オンにしてみました。両方のデバイスがフォアグラウンドで実行されています。まだ運がありません。助けてください。

0 投票する
1 に答える
799 参照

bluetooth-lowenergy - 周辺機器から受信したエラー:didUpdateNotificationStateForCharacteristic

2 番目の BLE セントラル アプリと正常に接続する Bluetooth Low Energy ペリフェラル アプリを開発しました。ただし、周辺機器が提供するサービスの特徴の 1 つについて、セントラル アプリに通知をサブスクライブさせることができません。中央アプリには、次のものがあります。

残念ながら、これは失敗し、デリゲート メソッドperipheral:didUpdateNotificationStateForCharacteristicでエラーが受信されます(エラー タイプは「不明」です)。上記のコード (aChar) で特徴的なオブジェクトを出力すると、次のようになります。

通知 = NO であることに注意してください。特性が通知できるようにペリフェラルを設定するにはどうすればよいですか?

0 投票する
2 に答える
5113 参照

swift - iOS の広告で bluetooth LE データを送信する

私のアプリは Bluetooth LE ペリフェラルとして実行されており、Advertisement で数バイトのカスタム データを送信しようとしています。

しかし、CBAdvertisementDataManufacturerDataKey のデータ セットが取り除かれ、無線で送信されないようです。私は、Apple のドキュメントとオンラインでこれについて見つけることができるすべてのスクラップを読みました。CBAdvertisementDataLocalNameKey と CBAdvertisementDataServiceUUIDsKey のみがサポートされているため、Core Bluetooth はデータを無視するというのがコンセンサスのようです。上記はコンパイルして正常に実行され、BT スキャナー アプリで「これが機能することを願っています」が、カスタム データの 2 ビットが機能していないようです。

これを回避する方法はありますか? CoreBluetooth または私が見逃している完全にばかげたものに受け入れられる代替手段はありますか?

ありがとう、

ダン

0 投票する
1 に答える
1473 参照

ios - サービス UUID ではなく、BLE IOS ペリフェラルの UUID を取得します

ペリフェラル側から UUID を取得するにはどうすればよいですか。広告パッケージのサービス UUID ではありません。

中央側から見てみましょう:

peripheral.identifier必要なのは、に含まれているものではなく、からの UUIDadvertisementDataです。中央側からでも取り出せますが、これも周辺側から行う必要があります。

0 投票する
0 に答える
2070 参照

bluetooth-lowenergy - CoreBluetooth - セントラルからペリフェラルへのデータの書き込み

Apple が提供する CoreBluetooth 用の Sample アプリを参照したところ、Peripheral から Central に Data を送信できたので、Central から Peripheral に Data を書き込む必要があります。グーグルの後、私はそれが使用できることを発見しました[_discoveredPeripheral writeValue:aData forCharacteristic:charc type:CBCharacteristicWriteWithResponse];

以下は、周辺機器にメッセージを送信するためのセントラルの実装です。

このメソッドを呼び出すと、データを書き込むことができません。代わりに、以下のようにコンソールに CoreBluetooth 警告が表示されます。

誰かが周辺機器のオブジェクトを取得する最良の方法と、セントラルから周辺機器へのデータの送信を開始する方法を教えてくれれば幸いです。

EDIT目的の C で UUID から特性を取得する方法に 示されている方法を試しましたか?

しかし、この場合、サービスをループしようとするたびにサービスをループすることができず、services=nil が返されます。

0 投票する
1 に答える
1287 参照

bluetooth - 広告の iPhone ローカル名を変更する

CoreBluetooth フレームワークを使用して、ペリフェラル モードでアドバタイズしている iPhone のペリフェラル名を変更することは可能ですか?

例: 周辺機器の iPhone がカスタム名をブロードキャストし、中央モードのスキャン時に別の iPhone がその名前を読み取れるようにしたいと考えています。

ペリフェラル 広告 iPhone に GAP 名を設定することはできますか?