扫描 BLE 设备不工作
Scanning BLE device not working
我正在尝试使用
扫描 BLE 设备
mBluetoothAdapter.startLeScan(this);
(我知道它对于较新的版本来说已经过时了,但只是为了看看它是否适用于我的 phone [4.4],我正在使用它)。因此它开始扫描然后继续前进而不会出现错误但未检测到任何设备。 OnLEScan 事件也被触发,但其中的设备参数为空。我的 LE 设备就在那里并已连接。
在谷歌搜索中,我发现如果蓝牙适配器没有 UUID,就会发生这种情况。
如何设置 UUID? OnLeScan called/fired 是什么时候?还有其他解决办法吗?
我的回调代码在这里
//BluetoothAdapte.LEScanCallBack on MainActivity
@Override
public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord){
Log.i(TAG, "New LE Device: " + device.getName() + "@" + rssi);
if(Device_Name.equals(device.getName())){
mDevices.put(device.hashCode(), device);
invalidateOptionsMenu();
}
}
- 使用此代码,因为它将让您深入了解所有数据
在您的 BLE 设备中可用(将在日志中显示数据)。
- UUID基本由设备厂商提供,不能自行设置。
- 例如:我正在使用 BLE Beacons,它的制造商为我提供了 API,它帮助我获取了它的 UUID。
有时,设备本身有一个特殊的 ID(在我的例子中是工厂 ID),它可以帮助您检索您的 UUID,也可以从制造商的网站或 API。
BluetoothAdapter bluetoothAdapter;
BluetoothLeScanner bluetoothLeScanner;
bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
bluetoothLeScanner = bluetoothAdapter.getBluetoothLeScanner();
bluetoothLeScanner.startScan(new ScanCallback() {
@Override
public void onScanResult(int callbackType, ScanResult result) {
super.onScanResult(callbackType, result);
String s = "\nRssi : "+result.getRssi()+"" +
"\nName (Get Device) : "+result.getDevice().getName()+"" +
"\nBytes"+result.getScanRecord().getBytes()+"" +
"\nGet Device : " + result.getDevice()+"" +
"\nAddress : "+result.getDevice().getAddress()+"" +
"\nService UUIds : "+result.getScanRecord().getServiceUuids().get(0)+"" + //Unique
"\nName (Scan Record) : "+result.getScanRecord().getDeviceName()+"" +
"\nUuids device : "+result.getDevice().getUuids()+"" +
"\nDescribe contents : "+result.describeContents();
//This will show you all the data in logs.
Log.e("All Data",s);
}
@Override
public void onBatchScanResults(List<ScanResult> results) {
super.onBatchScanResults(results);
}
@Override
public void onScanFailed(int errorCode) {
super.onScanFailed(errorCode);
}
});
}
Android 4.4 不兼容,我用的是 android 5.1 设备,它运行得很好!
我正在尝试使用
扫描 BLE 设备mBluetoothAdapter.startLeScan(this);
(我知道它对于较新的版本来说已经过时了,但只是为了看看它是否适用于我的 phone [4.4],我正在使用它)。因此它开始扫描然后继续前进而不会出现错误但未检测到任何设备。 OnLEScan 事件也被触发,但其中的设备参数为空。我的 LE 设备就在那里并已连接。
在谷歌搜索中,我发现如果蓝牙适配器没有 UUID,就会发生这种情况。 如何设置 UUID? OnLeScan called/fired 是什么时候?还有其他解决办法吗?
我的回调代码在这里
//BluetoothAdapte.LEScanCallBack on MainActivity
@Override
public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord){
Log.i(TAG, "New LE Device: " + device.getName() + "@" + rssi);
if(Device_Name.equals(device.getName())){
mDevices.put(device.hashCode(), device);
invalidateOptionsMenu();
}
}
- 使用此代码,因为它将让您深入了解所有数据 在您的 BLE 设备中可用(将在日志中显示数据)。
- UUID基本由设备厂商提供,不能自行设置。
- 例如:我正在使用 BLE Beacons,它的制造商为我提供了 API,它帮助我获取了它的 UUID。
有时,设备本身有一个特殊的 ID(在我的例子中是工厂 ID),它可以帮助您检索您的 UUID,也可以从制造商的网站或 API。
BluetoothAdapter bluetoothAdapter; BluetoothLeScanner bluetoothLeScanner; bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); bluetoothLeScanner = bluetoothAdapter.getBluetoothLeScanner(); bluetoothLeScanner.startScan(new ScanCallback() { @Override public void onScanResult(int callbackType, ScanResult result) { super.onScanResult(callbackType, result); String s = "\nRssi : "+result.getRssi()+"" + "\nName (Get Device) : "+result.getDevice().getName()+"" + "\nBytes"+result.getScanRecord().getBytes()+"" + "\nGet Device : " + result.getDevice()+"" + "\nAddress : "+result.getDevice().getAddress()+"" + "\nService UUIds : "+result.getScanRecord().getServiceUuids().get(0)+"" + //Unique "\nName (Scan Record) : "+result.getScanRecord().getDeviceName()+"" + "\nUuids device : "+result.getDevice().getUuids()+"" + "\nDescribe contents : "+result.describeContents(); //This will show you all the data in logs. Log.e("All Data",s); } @Override public void onBatchScanResults(List<ScanResult> results) { super.onBatchScanResults(results); } @Override public void onScanFailed(int errorCode) { super.onScanFailed(errorCode); } }); }
Android 4.4 不兼容,我用的是 android 5.1 设备,它运行得很好!