web-dev-qa-db-ja.com

iBeacon Bluetooth Low EnergyをAndroid 4.3と組み合わせます

AndroidデバイスからiBeacon(iOS 7.0機能)を検出する方法を探しています。iBeaconのように見えるAndroidドキュメントを読みますAndroidのドキュメントでは、そのデータをポーリングするべきではないと書かれていますが、検出のためにこれは必須です。

私は多くのことをグーグルで検索していますが、このトピックは非常に新しい(新しいタグ ibeacon を作成した)ので、実装を説明するiOSの世界からのリソースへのリンクを取得できれば幸いです。また、いくつかのAndroid libsがありますが、まだ見つかりませんでした。

39
rekire

編集:以下のライブラリは削除されましたが、代わりのライブラリが利用可能になりました:

https://github.com/AltBeacon/Android-beacon-library


IOS7 iBeacon SDKをAndroidに移植しました。標準のiBeaconsを確認し、その範囲を推定することができました。コードは次の場所にあります。

https://github.com/RadiusNetworks/Android-ibeacon-service

これを機能させるには、Android 4.3で低エネルギーBluetooth APIが導入されました。低エネルギーBluetoothチップセットを搭載したデバイスも必要です。

上記の完全なライブラリを使用したくない場合は、独自のライブラリをロールできます。 iBeaconsは、既知のバイトシーケンスで始まるBLEアドバタイズメントを1秒に1回送信するだけです。 BLEスキャンを実行して各広告を取得し、既知のiBeaconバイトシーケンスで始まるものを探すには、Androidと伝える必要があります。iBeaconフィールドを解析できます。これがどのように行われるかを示すコード:

https://github.com/RadiusNetworks/Android-ibeacon-service/blob/master/src/com/radiusnetworks/ibeacon/IBeacon.Java#L177-L231

67
davidgyoung

ここでの唯一の問題は、アプリが実行されていなくてもビーコンを検出することです。 iOS7とは異なり、ネイティブサポートではありません。 iOS7では、BTを使用すると、登録されたiBeaconの領域に入ると自動的に通知されます。

IBeaconをAndroid 4.3 IntentServiceとAlarmManagerを使用したAPI。30秒ごとにスキャンを実行します(バッテリーの電力を節約するために、より長くなります)。ユーザーに適しています。一致するuuid/major/minorが見つかると、通知がトリガーされます。

これがあなたの質問の解決策だと思います。

2
Alfred Loh

私はあなたが何を意味するのかよくわかりませんでした。データをポーリングしてはいけないと言っているドキュメントへのリンクを提供してもらえますか?

しかし、iBeaconはサーバーとして機能しているように思えますが、これはちょっとおかしいです。電話自体ではなく、他のデバイスを見つけるためのものではありませんか?

https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.position_quality.xml

しかし、これが使用する特性です。私には、あなたが探しているデバイスは「ビーコン」であり、電話自体はただのリスナーであるように思えます。したがって、EHPEおよびEVPEデータをポーリングすることはありませんが、実際にはその変更または「ブロードキャスト」を聞く必要があります。

私自身もこれに少し慣れており、実際に特定のドキュメントを見つけることができませんでした。

ただし、私が提供したリンクの上部隅には、PDF形式の完全なドキュメントを提供するダウンロードリンクがあります。おそらく、さらに多くの答えが見つかるでしょう。

0
user2637046