ScanFilter android手册页提到您可以根据远程设备的MAC地址进行过滤 "支持以下字段的当前过滤:远程设备的Mac地址" 即可。 AFAIK,广告中播出的地址是一个私人可解析地址"这是一个定期更改的地址,以避免设备跟踪攻击。那么,ScanFilter如何知道远程设备的mac地址来进行过滤。我已将远程设备的蓝牙mac地址添加为过滤器,如下面的代码段所示,但扫描没有产生任何结果:
List<ScanFilter> listFilter = new ArrayList<>();
ScanFilter scanFilterMac = new ScanFilter.Builder().setDeviceAddress("88:88:88:B0:03:DB").build();
listFilter.add(scanFilterMac);
bluetoothLeScanner.startScan(listFilter, scanSettings, scanCallback);
但是,当我按照以下代码段扫描基于UUID的服务时,过滤有效:
List<ScanFilter> listFilter = new ArrayList<>();
ScanFilter scanFilterService = new ScanFilter.Builder().setServiceUuid(SERVICE_ID).build();
listFilter.add(scanFilterService);
bluetoothLeScanner.startScan(listFilter, scanSettings, scanCallback);
知道如何根据远程设备MAC地址生成ScanFilter吗?手册页中提到的MAC地址是否与您使用以下代码以编程方式在其他设备上打印的蓝牙MAC地址相同:
BluetoothManager bluetoothManager = (BluetoothManager) context.getSystemService(Context.BLUETOOTH_SERVICE);
BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter();
Log.i(TAG, "MAC: "+bluetoothAdapter.getAddress());
答案 0 :(得分:0)
扫描设备时可以获得的地址是不会更改的BT设备的mac地址。在过滤中,您使用格式为12:34:56:78:9A:BC的相同地址。 你的代码:
var start = moment().subtract(1, 'days');
var end = moment().subtract(1, 'days');
var start2 =moment().subtract(2, 'days');
var end2 =moment().subtract(2, 'days');
function cb(start, end, start2, end2) {
console.log(start2);
$('#reportrange3 span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));
$('#reportrange4 span').html(start2.format('MMMM D, YYYY') + ' - ' + end2.format('MMMM D, YYYY'));
retrievedata(start.format('YYYY-MM-DD'), end.format('YYYY-MM-DD'),start2.format('YYYY-MM-DD'), end2.format('YYYY-MM-DD') );
}
$('#reportrange3').daterangepicker({
startDate: start,
endDate: end,
ranges: {
'Today': [moment(), moment()],
'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
'Last 7 Days': [moment().subtract(6, 'days'), moment()],
'Last 30 Days': [moment().subtract(29, 'days'), moment()],
'This Month': [moment().startOf('month'), moment().endOf('month')],
'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
}
}, cb);
$('#reportrange4').daterangepicker({
startDate: start2,
endDate: end2,
ranges: {
'Today': [moment(), moment()],
'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
'Last 7 Days': [moment().subtract(6, 'days'), moment()],
'Last 30 Days': [moment().subtract(29, 'days'), moment()],
'This Month': [moment().startOf('month'), moment().endOf('month')],
'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
}
}, cb);
cb(start, end, start2, end2);
是对的。
您遇到的问题很可能是过滤后的扫描没有给出任何结果,因为在某些Android设备中存在MAC地址过滤不起作用的错误。我不确切知道有多少百分比的Android设备无法正常工作,因为我只能访问大约10种不同的设备型号。如果您想验证代码是否有效,我建议您使用任何具有最新固件更新的Nexus设备。
我建议不要使用此mac地址过滤,并在onScanResult函数上自行制作过滤代码,以支持所有Android 5.0+设备。