私はAndroid携帯からBLEビーコンの距離推定に取り組んでいます。私は、RSSIに基づいて距離を推定する独自のアルゴリズムを開発しました。 (私はすぐにライブラリーの形で距離計算アルゴリズムを展開します)。計算のためには、電話はビーコンから膨大な数の広告パケットを必要とする。BLEビーコンパケットのための無限のAndroid BLEスキャン
これまでのところ、BLEスキャンの通常の方法でコードをテストしました。現在、ターゲットAPIレベル19のコードを書いています。以下は、私が作業しているコードの一部です。ここで、ビーコンのスキャンを開始し、10秒後に停止します。
現在、私はUIスレッドでほとんどのことを行っています。スレッドをさらに作成することで、次のような機能を実現する必要があります。
- UIスレッドは、すべての計算またはLeScanから解放されます。
- PacketReaderThread - パケットをスキャンし、それらをarrayListに追加し続けるための別のスレッドです(アルゴリズムでの消費時に不要なデータをarrayListから消去します)。一定時間後にスキャンを停止するのではなく、アプリが実行されている限り、リアルタイムで作業を継続するために無期限にスキャンをオンにしたいと考えています。だから私はIntentServiceをこのために使うかもしれない。
- DistanceCalculatorThread(またはAsyncTask) - ArrayListオブジェクト(スキャンされたパケットを含む)は、データパケットを取得または消去し、距離計算をUIに通知するためにPacketReaderThreadとの間で同期されます。
は、私が質問している以下のGrepcode 上BluetoothAdapter.LeScanCallbackの実装を見ました。
- BluetoothAdapter.LeScanCallbackは、暗黙的にメイン/ UIスレッドにバインドされているか、他のスレッドと移植可能ですか?
- 上記のコードの両方の実装を他のスレッドに移動すると、そのスレッドでコールバックが機能するのですか、それともmain/uiスレッドにバインドされますか? (別のスレッドでパケットをスキャンする必要があるので、私はbluetoothAdapter.startLeScan(LEScanCallback)とBluetoothAdapter.LeScanCallbackについて知っておく必要があります)
注 - 私はすでにthis questionに従っています。メインスレッド上で、私は、実際の答えが得られませんでした。また、私はaltBeaconの仕様を見て、そのリファレンスアプリを研究し、それはまた、スキャン・ストップ・scanAgainの方法でCycledScanメカニズムを使用しています)
はい、いい結果があります。 RSSIと距離のマッピングはLocateよりも速く収束します;)あなたはそのライブラリをとてもよく書いています。私はそれを研究しました。デイビッドのおかげで、LooperThreadを使用します。コールバックに関する公式の文書が見つかった場合は、お知らせください。そして私が数週間でデモを完了すると、私たちは間違いなく議論するでしょう。 – Tejas