2016-03-29 11 views
2

アンドロイドでBLEを使用して簡単なアドバタイズ+スキャン機能を実装しています。何らかの理由で同じデバイスをコールするonScanResultコールバック広告のためのBluetoothLeScannerを使用してスキャンすると、同じデバイスに対して複数回onScanResultが呼び出されます

:スキャンのための

//Advertise settings build 
AdvertiseSettings.Builder builder = new AdvertiseSettings.Builder(); 
builder.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_LATENCY); 
builder.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH); 
builder.setConnectable(true); 

AdvertiseSettings advSettings = builder.build(); 

//Advertise data build 
AdvertiseData.Builder advDataBuilder = new AdvertiseData.Builder(); 
advDataBuilder.addServiceUuid(ParcelUuid.fromString(SFGattAttributes.SERVICE)); 

AdvertiseData advertiseData = advDataBuilder.build(); 

//Start Advertising 
bluetoothLeAdvertiser.startAdvertising(advSettings, advertiseData, advertiseData, new BLEAdvertiserCallback()); 

BluetoothManager bluetoothManager = (BluetoothManager) context.getSystemService(Context.BLUETOOTH_SERVICE); 
bluetoothAdapter = bluetoothManager.getAdapter(); 
bluetoothLeScanner = bluetoothAdapter.getBluetoothLeScanner(); 
bluetoothLeScanner.startScan(getScanFilters(), getScanSettings(), new BLEScanCallback()); 

たびは、RSSI値の差であると考えられる唯一の違い。

この複数回の呼び出しを回避する手段はありますか?

+0

目的を表示するために、以前と同じデバイスが選択されたかどうかを確認する必要があります。私も同じ問題に遭遇しました。 –

答えて

3

これは実際には機能であり、A(広告)BLEデバイスのレンジングに使用できます。スキャンサイクル中に特定のデバイスに対して複数のスキャン結果が得られない(古い)デバイスもあります。これは、BLEビーコンを含む他のデバイスのレンジングに問題を引き起こす。複数の通話は、(時間の経過とともに)デバイスが依然として到達可能/アクセス可能であることを知ることもできます。

したがって、複数のコールを必要としない場合は、既知のデバイス(MACアドレス)の呼び出しを無視します。それを無効にすることはできません。

多くのデバイス(特に携帯電話)はMACアドレスを変更することに注意してください。 2分ごとにも新しいMACアドレスを古いデバイス(古いMACアドレス)にマッピングするのは簡単ではありません。それに応じて行動を処理する必要があります。

関連する問題