50

背景:

理想的には、Android デバイスが常に Bluetooth Low Energy デバイスをスキャンし、特定のプロパティを持つ新しいデバイスが表示されるたびにアプリケーションを起動できるようにしたいと考えています。

したがって、BLE のブロードキャスト パケットは、たとえば、ブロードキャスト デバイスによって提供される一連のサービスを列挙します。その後、アプリは特定のサービスへの関心を登録し、このサービスを備えたデバイスが範囲内に入ると自動的に開始されます。

私が理解していることから、これは Android BLE API の仕組みではありませんか? では、どうすれば似たようなものを入手できますか?

最も簡単な例:

周囲温度を経時的に記録する BLE センサーがあります。Android フォンが近くにあるときはいつでも、接続してすべてのデータをダウンロードし、クラウド ストレージ ソリューションに送信したいと考えています。このアプリには GUI は必要ありません (少なくとも構成が完了した後は不要です)。しかし、バッテリーを消耗させずにバックグラウンドで実行するにはどうすればよいでしょうか。また、範囲内にあるデバイスをすばやく接続する可能性がかなり高くなるでしょうか?

質問:

タイマーを設定して時々アプリを起動し、手動でスキャンを開始する必要がありますか? 次に、どのような間隔を選択する必要がありますか。バッテリーに悪影響を与えずにスキャナーを実行したままにできる時間はどれくらいですか?

考えられる解決策:

これが私がこれまでに思いついたものです。

  • スキャンする間隔とデバイスを設定する構成アクティビティ
  • 構成アクティビティは、スケジューラの例と同様の WakefulBroadcastReceiver をセットアップします
  • レシーバーが onReceive イベントを受け取ると、BLE スキャン サービス (私が作成したもの) をウェイクフル サービスとして開始します。
  • スキャン サービスがスキャンを開始します (コールバックが登録されています)。
  • サービスは、それに基づいて行動できる adv レポートを取得する場合があります
  • タイムアウト後、サービスはスキャナーを停止し、ウェイクフル サービスを終了します。

これは機能しますが、それが最善の方法であるかどうかはわかりません。また、バッテリーの寿命を損なうことを避けながら、どれだけ短い間隔を空けることができるのかもわかりません。私が望むのは、2 分ごとにスキャンを開始し、10 ~ 20 秒間スキャンすることです。しかし、デバイスをウェイクアップするのはかなり頻繁になると思いますか?

4

1 に答える 1

23

この機能はすべて、オープン ソースのAndroid ビーコン ライブラリに移動されました。

  • 目的のパターンに一致する iBeacons が検出されたときにアプリをウェイクアップ/起動します

  • ユーザーがまだアプリを起動していなくても、バックグラウンドでビーコン スキャンを実行する

  • バッテリーを節約するために、バックグラウンドでスキャン速度を 5 分ごとに 30 秒に自動的に下げます。(タイミング設定可能)

コード例はここに表示されます

BLE デバイスがビーコンでない場合でも、センサーをビーコンとして送信し、検出後にメイン サービスに接続することで、このライブラリを使用してこれを実現できます。

于 2014-01-03T13:31:09.200 に答える