私はAltBeaconとこれらのパラメータを使って遊んでいます。私の目標は、できるだけ早く(最速で)コールバックdidRangeBeaconsInRegion()
を持つことです。RangedBeacon.setSampleExpirationMillisecond、setForegroundScanPeriodとsetForegroundBetweenScanPeriodの間のAltBeaconの相関
レンジングでは、平均を使用して距離を計算し、コールバックを行うことを理解しています。私は距離に興味がありませんが、rssi。それは、rssiが1で変化するなら、それは大丈夫です。私の現在のコードでは
、私は現在使用します。
RangedBeacon.setSampleExpirationMilliseconds(1000);
try
{
mBeaconManager.setForegroundScanPeriod(700l);
mBeaconManager.setForegroundBetweenScanPeriod(0l);
mBeaconManager.updateScanPeriods();
}
catch(RemoteException ex)
{
...
}
私のアプリがフォアグラウンドにすべての時間です。 Nexus 5Xで動作します。
私は、setSampleExpirationMilliseconds()の値が小さいほど、コールバックがよくなることを確認しました。 setForegroundBetweenScanPeriod
は0に設定されています。これは常にサービスが常にスキャンされることを意味します。
私の会場には、約30個のビーコンが配置されています。上記のコードの設定では、毎回異なるビーコンセットをコールバックします。
私はビーコンのすぐ隣に立っていても、ビーコンは1秒以下で聞こえません。私がコールバックを取得すると、通常は他の遠いビーコンのためです。私が次回立っている特定のビーコンを聞くのに30秒かかることがあります。
設定したビーコンは20msごとに鳴り響きますので、その700msの間に私はそれらを見なければなりません。
私がsetForegroundScanPeriod
を5000に上げると(私は近くのビーコンを得るためにスキャン時間が長くなることを願っています)、私はコールバックが少なくなります。コールバック間の遅延は約10秒です。ですから、値が小さいほどコールバックが速いことを意味します。
私の質問:
なぜ私は取得しないコールバック(20msの時、それらはすべてチャープ)内のすべてのビーコン?コールバックはどのように呼び出されますか?それは十分な情報を持っているとき、またはそれはある種の間隔を持っていますか?それを制御するのは何ですか?
setSampleExpirationMilliseconds
、setForegroundScanPeriod
、とsetForegroundScanPeriod
間の任意の関係がありますか?一緒にうまく働かせる方法は?私のアプリでは、1秒未満で近くのビーコン(3フィート以下)を聞く必要があります。これを達成するためにパラメータを設定するにはどうすればよいですか?
このような長い質問をお読みいただきありがとうございます。任意の洞察力を感謝します。
@davidgyoung多分あなたは光を放つことができますか?
こんにちはDavidさん、 ありがとうございました。私はいつも 'setSampleExpirationMilliseconds'がコールバックのレートに影響を与えると考えていたので、はるかに明確です。 'setForegroundScanPeriod(500l)'を設定しようとしましたが、コールバックレートは信頼できません(ただし、一般的には* 700msより速いです)。コールバックの中には500ms遅れているものもあれば、100ms遅れているものもあれば、1秒かかるものもあります。 Androidスタジオのlogcatの遅延が考えられます。 'setForegroundScanPeriod(500l)'が500msごとに呼び出されることは保証されていますか? – Caten
また、ライブラリがスキャンを再開すると判断するものは何ですか?私が使用しているほとんどすべてのデバイスが複数のパケットを処理するのに十分近代的であることを知っているので、いくつかのパケットが見つからない可能性のあるスキャンを停止して再起動することはありませんか? – Caten
コールバックが正規ではないと聞いて驚いています。私はこれを見たことがない。 500lに設定すると、500msごとに呼び出され、10ms以内に遅延されます。妥当な機能要求であるにもかかわらず、スキャンの停止を無効にするAPIはライブラリにありません。カスタムバージョンを使用するには、それを自分で修正する必要がある場合は、些細な変更です。 – davidgyoung