Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何阻止蓝牙扫描重复找到的设备以及如何使用ScanFilter限制扫描结果_Java_Android_Bluetooth Lowenergy - Fatal编程技术网

Java 如何阻止蓝牙扫描重复找到的设备以及如何使用ScanFilter限制扫描结果

Java 如何阻止蓝牙扫描重复找到的设备以及如何使用ScanFilter限制扫描结果,java,android,bluetooth-lowenergy,Java,Android,Bluetooth Lowenergy,我正在尝试创建一个室内定位应用程序来检测自己的位置和寻路。我已经设置了蓝牙应用程序来扫描和显示找到的设备和信标。然而,我发现一些发现的设备是重复的。我需要做什么来阻止它,我只想找到某些设备的mac地址。我可以知道如何使用方法ScanFilter,以及ScanFilter和ScanFilter.Builder之间的区别吗?我是否需要实施扫描设置 我试着把这个 ScanFilter scanFilterMac=new ScanFilter.Builder().setDeviceAddress(“88

我正在尝试创建一个室内定位应用程序来检测自己的位置和寻路。我已经设置了蓝牙应用程序来扫描和显示找到的设备和信标。然而,我发现一些发现的设备是重复的。我需要做什么来阻止它,我只想找到某些设备的mac地址。我可以知道如何使用方法
ScanFilter
,以及
ScanFilter
ScanFilter.Builder
之间的区别吗?我是否需要实施
扫描设置

我试着把这个

ScanFilter scanFilterMac=new ScanFilter.Builder().setDeviceAddress(“88:88:88:B0:03:DB”).build();
我只更改了mac地址,但没有得到任何结果。既然我知道前6位数字是一样的,我可以这样做吗

ScanFilter scanFilterMac = new ScanFilter.Builder().setDeviceAddress("68:54:F5:([A-Fa-f0-9]{2}:){2}([A-Fa- 
f0-9]{2})").build();
public void startScanning(){
final BluetoothLeScanner btScanner=btAdapter.getBluetoothLeScanner();
if(btScanner==null){
//尚未启用或不受支持
返回;
}
System.out.println(“开始扫描”);
peripheralTextView.setText(“”);
startScanningButton.setVisibility(视图.不可见);
stopScanningButton.setVisibility(View.VISIBLE);
AsyncTask.execute(新的Runnable(){
@凌驾
公开募捐{
ScanFilter scanFilterMac=new ScanFilter.Builder().setDeviceAddress(“68:54:F5:88:88:88”).build();
添加(scanFilterMac);
btScanner.startScan(listFilter,leScanCallback);
}
});
}
最终类BleScanCallback扩展了ScanCallback{
//地址->设备映射
私人最终地图扫描结果;
公共void onScanResult(int callbackType、ScanResult){
此.addScanResult(结果);
}
public void onBatchScanResults(列出结果){
对于(最终对象结果1:结果){
ScanResult结果=(ScanResult)结果1;
此.addScanResult(结果);
}
}
公共无效OnScan失败(内部错误代码){
}
私有void addScanResult(ScanResult结果){
BluetoothDevice=result.getDevice();
String name=device.getName();
if(name!=null&&!this.scanResults.containsKey(device.getAddress())){
字符串var6=device.getAddress();
this.scanResults.put(var6,设备);
}否则{
StringBuilder var10001=(新的StringBuilder()).append(“bleAddScanResult忽略”);
Log.d(“Ble”,var10001.append(device.getName()).append(“”).append(device.getType()).append(“”).append(device.getAddress()).append(“”).toString());
}
}
公共BleScanCallback(映射扫描结果){
超级();
this.scanResults=scanResults;
}
}
最终类BleScanCallback扩展了ScanCallback{
//地址->设备映射
私人最终地图扫描结果;
公共void onScanResult(int callbackType、ScanResult){
此.addScanResult(结果);
}
public void onBatchScanResults(列出结果){
对于(最终对象结果1:结果){
ScanResult结果=(ScanResult)结果1;
此.addScanResult(结果);
}
}
公共无效OnScan失败(内部错误代码){
}
私有void addScanResult(ScanResult结果){
BluetoothDevice=result.getDevice();
String name=device.getName();
if(name!=null&&!this.scanResults.containsKey(device.getAddress())){
字符串var6=device.getAddress();
this.scanResults.put(var6,设备);
}否则{
StringBuilder var10001=(新的StringBuilder()).append(“bleAddScanResult忽略”);
Log.d(“Ble”,var10001.append(device.getName()).append(“”).append(device.getType()).append(“”).append(device.getAddress()).append(“”).toString());
}
}
公共BleScanCallback(映射扫描结果){
超级();
this.scanResults=scanResults;
}
}

创建一个
集合
来跟踪连接的设备,而在CanCallback实现中,只连接未连接的设备。如何创建一个集合来跟踪连接的设备?你是说在ScanCallback实现中?你的leScanCallback就是ScanCallback。Java哈希字符串集,添加连接设备的名称,然后将其与新找到的设备的名称进行比较。您可以给我一个示例吗?创建
以跟踪连接的设备,而在CanCallback实现中,仅连接未连接的设备。如何创建集以跟踪连接的设备?你是说在ScanCallback实现中?你的leScanCallback就是ScanCallback。一个Java哈希字符串集,添加连接设备的名称,然后将其与新找到的设备名称进行比较。您能给我举个例子吗?
final class BleScanCallback extends ScanCallback {
  // address -> device map
  private final Map<String, BluetoothDevice> scanResults;

  public void onScanResult(int callbackType,  ScanResult result) {
     this.addScanResult(result);
  }

  public void onBatchScanResults( List results) {
     for (final Object result1 : results) {
        ScanResult result = (ScanResult) result1;
        this.addScanResult(result);
     }

  }

  public void onScanFailed(int errorCode) {
  }

  private void addScanResult(ScanResult result) {
     BluetoothDevice device = result.getDevice();
     String name = device.getName();
     if (name != null  && !this.scanResults.containsKey(device.getAddress())) {
        String var6 = device.getAddress();
        this.scanResults.put(var6, device);
     } else {
        StringBuilder var10001 = (new StringBuilder()).append("Ble addScanResult ignore ");
        Log.d("Ble", var10001.append(device.getName()).append(' ').append(device.getType()).append(' ').append(device.getAddress()).append(' ').toString());
     }

  }

  public BleScanCallback( Map<String, BluetoothDevice> scanResults) {
     super();
     this.scanResults = scanResults;
  }
 }