2017-11-22 32 views
0

私はしばらくの間、いくつかのBLE関連アプリケーションを開発しています。 疑問は簡単です。「のonScanResultメソッドで受信したBLEスキャンの結果は、キャッシュされた結果セットを提供していますか?AndroidのBluetoothスキャンは、onScanResultコールバックによってキャッシュ/バッファリングされた結果を表示しますか?

あなたが私をはっきりと見せない場合は、私の実験に飛び込んでもう少し説明してください。

私はPinmicro (Card Beacon)のビーコンを使用しており、100ミリ秒の間隔でブロードキャスト/アドバタイズするように設定しました。 私はスキャンを開始するためにandroid.bluetooth.le.ScanSettings.SCAN_MODE_LOW_LATENCYモードを使用していますが、私はLolipop(正確には6.0.1のNexus 5)の上のアンドロイドバージョンで実行しています。私は私の周りに約100個のビーコンを持っているが、logcatにそのRSSIと共に1つのビーコン(TARGETビーコンと言う)だけを記録する。

私がスキャンを開始すると、物事はほぼ2〜3分間は大丈夫ですが、さらにRSSIのアップデートは少し遅れています。以下のシナリオを参照してください。

  1. スタートはネクサス5にTARGETビーコン近い
  2. 置きスキャン - 周りのRSSIを取得する - -30ビット離れネクサス5から場所TARGETビーコンを
  3. -40に周りのRSSIを取得します-60〜-70
  4. 各サイクルの間に30秒間待機するステップ2と3を繰り返します。
  5. 15または20サイクル後、ステップ2でRSSI -60〜-70を得ています。ステップ3で-40にします。

私は、Android OSがすべてのBLE広告をキャッシュしており、キャッシュされた結果をonScanResultコールバックで送信しているため、キャッシュされた古い広告が数秒後に配信されることになります。私は確信していませんが、それは事実でしょうか?もしそうなら、OSからBLE広告キャッシュをクリアする方法はありますか?

キャッシュをクリアするための直接的な方法、回避策、リフレクションテクニックなどのような、あらゆる種類の提案が最も歓迎されています。

ありがとうございます!

答えて

2

いいえキャッシュがありません。あなたのアプリがそれらを十分に速く処理する限り、遅延はありません(そうでなければ、それらはキューに入れられます)。

+0

私は 'onScanResult'コールバックから' Executors.newSingleThreadExecutor() 'のインスタンスを使ってlogcatに別のスレッドでログを出力しています。 – Midhu

関連する問題