3

さまざまな bluetooth 低エネルギー周辺機器に数回接続および切断するアプリを開発しています。インターネットで多くの調査を行った結果、より迅速に再接続できるように、既に発見されたサービスと特性を保存する方法が見つかりませんでした。現時点では、再接続するたびに必要なサービスと特性を発見していますが、これには 1.5 ~ 2 秒かかります。

誰かが CBService または CBCharacteristic を保存/キャッシュする経験または解決策を持っていますか、または誰かがより速く再接続する方法を知っていますか?

助けてくれてありがとう

4

2 に答える 2

6

周辺機器、サービス、および特性オブジェクトをメモリにキャッシュしようとしましたが、手動キャッシュが機能しません。周辺機器から切断すると、サービスおよび特性オブジェクトは使用できなくなります。実際、CBPeripheral でさえも変更することができます。CoreBluetooth には、デバイスの UDID が数分ごとに変更される内部動作があります (CBPeripheral が別の iOS デバイスの場合)。

ただし、iOS 6 向けの開発を実行している場合は、作業を高速化する方法があります。WWDC 2012 での高度な Bluetooth の講演を見ると、キャッシング サービスと特性に関するスライドが最後に表示されます。基本的に、OS はそれらすべてをキャッシュできますが、ペアリングされたデバイスに対してのみです。ペアリングするには、不十分な認証エラーで書き込み要求に応答する必要があります。たとえば、iOS 周辺機器の場合、次のように記述します。

- (void)peripheralManager:(CBPeripheralManager *)peripheralManager didReceiveWriteRequests:(NSArray *)requests {
      ...

      [peripheralManager respondToRequest:request withResult:CBATTErrorInsufficientAuthentication];

      ...
}

iOS 周辺機器にペアリング ダイアログが表示され、その後ペアリングされます。それ以外は、コードを変更する必要はありません。通常どおり、discoverServices などを呼び出すだけで、より迅速に (つまり、即座に) 応答します。

10.8.3 でもこの動作をテストしましたが、動作していないようです。そのため、OS X で高速化する方法を知りません (周辺機器に接続したままにする以外に)。

于 2013-04-17T03:52:34.547 に答える
3

iOS 7 ではキャッシュが追加されています ( iOS 7: Bluetooth LE の新機能)。周辺機器への再接続、サービスの発見、特性の発見、および単一の特性の値の読み取りに、合計で 100 ミリ秒未満 (平均で 80 ミリ秒未満) の時間が見られます。

私のテスト構成は、iPad 3 に接続する iPad Air でした。

于 2013-11-14T19:31:19.877 に答える