Androidビーコンライブラリは実際にはブルートゥースサービスをスキャンするようには設計されていませんが、その目的には便利な場合があります。しかし、これを行うことは、そのデザインの穀粒に逆らって、あなたにはかなり醜いハックをさせることに注意してください。このようなハッキングがあなたの目を滲ませるようなら、それ以上読むことはできません!それを我慢できる人のために、ここにあなたがする必要があると思いますものです:
はGATTサービスUUIDを探しますビーコンパーサを設定します。サービスUUIDの数バイトで一致する必要があります。ライブラリのマッハは、一度に数バイトに一致するようにのみ設計されています。したがって、GATTサービスのUUIDが00010203-0405-0607-0809-0a0b0c0d0e0fの場合は、最初の3バイト:00,01,02を使用して一致する式として使用する必要があります。一致する式のエンディアンが異なるため、バイトの順序を02,01,00に戻す必要があります。ですから、このようなコードで終わる:あなたの完全なGATTサービスUUIDと一致した地域に基づいてレンジング
BeaconManager beaconManager = org.altbeacon.beacon.BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout("m:0-2=020100,i:0-15l,p:15-15"));
スタート。 (ここでも、あなたはあなたのサービスのことでUUIDを交換する必要があります。):
Region gattServiceRegion = new Region("gattServiceRegion",
Identifier.parse("00010203-0405-0607-0809-0a0b0c0d0e0f"), null, null);
beaconManager.setRangeNotifier(this);
beaconManager.startRangingBeaconsInRegion(region);
今すぐライブラリはdidRangeBeaconsInRegion
方法あなたのクラスにそれがGATTサービスUUIDのための広告を見ているたびにコールバックを行います。だからあなたは近くにいることを知っているので、省電力、バックグラウンドの立ち上げなどのライブラリの利点をすべて得ることができます。今問題は、connectGatt(...)
を呼び出すために必要な生のBluetoothDevice
オブジェクトへの参照がライブラリに公開されていないことです。
ライブラリのソースコードを変更しない限り、ビーコンがこの参照を取得するだけであることがわかったら、未処理のスキャンAPIを使用する必要があります。いずれにしても、生のスキャンAPIを使用してBluetoothDevice
を接続する必要がある場合、ライブラリを使用することはこのすべての問題に価値があるかどうかを判断する必要があります。
ありがとうございました! – jcady