我正在尝试使用
扫描BLE设备mBluetoothAdapter.startLeScan(this);
(我知道它对于较新的版本已经过时,但只是为了看到它适用于我的手机[4.4],我正在使用它)。因此,它开始扫描,然后继续前进而不会出错,但没有检测到设备。也会触发OnLEScan事件,但其中的device参数为null。我的LE设备就在那里并且已连接。
在Google上,我发现如果BluetoothAdapter没有UUID,就会发生这种情况。 如何设置UUID? OnLeScan何时被调用/解雇?还有其他解决方案吗?
我的回调代码在这里
//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();
}
}
答案 0 :(得分:0)
有时,设备本身提供了一个特殊ID(我的工厂ID),它可以帮助您从制造商的网站或API中检索您的UUID。
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);
}
});
}
答案 1 :(得分:0)
Anroid 4.4不兼容,我使用的是Android 5.1设备,它就像一个魅力!