私は自分のBLEデバイスで作業しています。これらのデバイスをリッスンするときはScanFilter
を使用したいので、興味のあるデバイスのみを取得します。私の解決策はコールバック内でフィルタリングすることですが、このフィルタリングが先に起こり、仕様に従って可能でなければならない。私はメーカー固有のデータをフィルタリングしようとしていますが、動作させることができません。これは私のコードです:私はこれだけの機能を有する任意のフィルタや設定を使用しない場合はアンドロイド用BluetoothLeScannerを使用している場合、メーカーデータをフィルタリングする方法は?
private ScanSetting getScanSettings(){
ScanSettings.Builder builder = new ScanSettings.Builder();
builder.setReportDelay(0);
builder.setScanMode(ScanSettings.SCAN_MODE_LOW_POWER);
return builder.build();
}
private ScanFilter getScanFilter(){
ScanFilter.Builder builder = new ScanFilter.Builder();
ByteBuffer manData = ByteBuffer.allocate(6); //The sensors only sends 6 bytes right now
ByteBuffer manMask = ByteBuffer.allocate(6);
manData.put(0, (byte)0x50);
manData.put(1, (byte)0x41);
manData.put(2, (byte)0x43);
manData.put(3, (byte)0x4b);
manData.put(4, (byte)0x45);
manData.put(5, (byte)0x54);
for(int i = 0; i < 6; i++){
manMask.put((byte)0x01);
}
builder.setManufacturerData(20545, manData.array(), manMask.array()); //Is this id correct?
return builder.build();
}
:
BluetoothLeScanner bleScanner = bluetoothAdapter.getBluetoothLeScanner();
ScanFilter filter = getScanFilter();
List<ScanFilter> scanFilters = new ArrayList<>();
scanFilters.add(filter);
ScanSettings scanSettings = getScanSettings();
bleScanner.startScan(scanFilters, scanSettings, scanCallback);
これは、フィルタや設定を作成する機能である
bluetoothLeScanner.startScan(scanCallback);
BLEデバイスを取得しているので、正しく配信されていることがわかります。私もメーカーの特定のデータを印刷することができ、それは私のフィルタで使用する6つの同じバイトであることがわかります。 ID(.setManufacturerData
関数の最初のパラメータ)が正しければ、私はこれを使用すると、私は見つけることができる、これについてのみ情報がScanFilter.Builder:
"Note the first two bytes of the manufacturer Data is the manufacturerId"
のためのAndroid開発者のページから次のテキストからだったので、私はわかりませんよ私は何も得られないデバイスの後にスキャンしようとします。私はここで何が欠けていますか?