2016-03-28 9 views
0

私のアプリケーションはビーコンを使用していません(少なくとも共通の意味はありません)。ユースケースは、特定のフォーマットに一致するBLEペリフェラルのバックグラウンドスキャンを連続的にバックグラウンドで行い、それらのペリフェラルに接続してデータを送受信し、切断することです。BLEスキャン/接続用のラッパーとしてAltBeaconを使用

AndroidのBluetooth LEの安定性と信頼性は、特に以前のAPIバージョン(18+)をサポートしている場合には、私にとっては望ましいことになります。 AltBeaconは、(少なくともスキャン側では)AndroidのBluetooth LE管理で奇妙なエッジケースや複雑さの多くを処理する熟練したライブラリと思われます。私はこのライブラリを利用して周辺機器をスキャンして識別し、自分でそれらに接続したいと考えています。誰も私がこれを達成する方法を知っていますか?

答えて

2

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を接続する必要がある場合、ライブラリを使用することはこのすべての問題に価値があるかどうかを判断する必要があります。

+0

ありがとうございました! – jcady

関連する問題