6

私はビーコン スキャン プログラムを実装しようとしていましたが、Android BLE サービスが iOS の「didRangeBeacons」メソッドと同様に動作するようにしたいと考えています。つまり、1 秒ごとに呼び出される必要があります。しかし、アンドロイドにはそのような方法はありません。しかし、Android には、1 秒未満のスキャン期間で非常に頻繁に呼び出される「leScanCallback」メソッドがあります。iOSの「didRangeBeacons」メソッドと同様に動作するように、leScanCallbackメソッドで機能を実装し、そのスキャン期間間隔を1秒に増やす方法はありますか?

※Androidでビーコンをスキャンし続けてスキャン間隔を長くするのもプログラミング的に悪いのでしょうか?

前もって感謝します

4

1 に答える 1

10

Android にはネイティブの iBeacon サポートがないことを理解することが重要です。AndroidleScanCallbackメソッドは、iOS メソッドとまったく同等ではありませんdidRangeBeacons

このleScanCallbackメソッドは、Bluetooth デバイスからのアドバタイズ パケットが検出されるたびにコールバックを提供するだけです (アドバタイズメントに接続可能ビットが設定されているデバイスは、スキャンを停止して再開するまで、最初に Mac アドレスが検出されたときにのみコールバックが与えられます)。タイマーでスキャンを停止して再開しない限り、スキャン期間はなく、パケットが到着するとコールバックが返されます。これは 1 秒間に何回も発生する可能性があります。

オープン ソースのAndroid iBeacon LibrarydidRangeBeaconsInRegionを作成するとき、iOS にあるものと同等のコールバックを作成するために、すべての機能をゼロから作成する必要がありました。これを行うために、ライブラリは約 1 秒に 1 回スキャンを停止して再開し、サイクルで検出されたすべての iBeacon のリストをバッファリングし、サイクルの最後に表示されている iBeacon のリストを使用してコールバックを呼び出すだけです。ここで説明していない複雑な問題は他にもたくさんあります。

コードは自由に確認および変更できるため、独自のコードを作成する場合は、コードを変更することをお勧めします。

于 2014-06-12T11:52:03.350 に答える