我正在运行一个简单的测试来连接自定义蓝牙设备。我正在使用运行API 19的旧版Android手机(操作系统级别4.4.2)。当我下载单独的BLE扫描仪应用程序时,它能够找到我的设备并在扫描时将其显示在列表中。但是,我的应用程序中的自定义代码未找到该设备。该代码似乎正在运行,但在LeScanCallback" onLeScan()"方法回调,它只打印一个设备(不同于我需要找到并最终连接的设备)。
以下是我在手边的片段中使用的代码:
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.ble_fragment, container, false);
final BluetoothManager bluetoothManager =
(BluetoothManager) mActivity.getSystemService(Context.BLUETOOTH_SERVICE);
bluetoothAdapter = bluetoothManager.getAdapter();
initScanCallback();
startScanWithServices(new ArrayList<String>());
return view;
}
这是initScanCallback()方法及其关联方法,用于访问支持方法(这是我的代码正在使用的方法):
private void initScanCallback(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
initCallbackLollipop(); // not used in this particular case
} else {
initScanCallbackSupport();
}
}
private void initScanCallbackSupport(){
if(callback != null) return;
this.callback = new BluetoothAdapter.LeScanCallback() {
@Override
public void onLeScan(final BluetoothDevice device, int rssi, final byte[] scanRecord) {
String address = device.toString();
String name = device.getName();
Log.d(TAG, "onLeScan, address: " + address + " | name: " + name + " | rssi: " + rssi);
}
};
以下是扫描开始的地方:
public void startScanWithServices(List<String> uuidFilters){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
scanLollipop(uuidFilters); // not used in this particular case
} else {
scanSupport(uuidFilters);
}
}
private void scanSupport(List<String> uuidFilters){
if (callback == null) {
initScanCallbackSupport();
}
boolean success = bluetoothAdapter.startLeScan(callback);
}
总体而言非常简单。但是,当此代码启动时,日志会立即开始泛滥:
02-03 13:54:13.476 11603-11618/myapp.myapp D/TAG: onLeScan, address: BC:14:85:D3:7D:3D | name: [TV] UN60J6300 | rssi: -102
02-03 13:54:13.946 11603-11817/myapp.myapp D/TAG: onLeScan, address: BC:14:85:D3:7D:3D | name: [TV] UN60J6300 | rssi: -92
02-03 13:54:14.576 11603-11619/myapp.myapp D/TAG: onLeScan, address: BC:14:85:D3:7D:3D | name: [TV] UN60J6300 | rssi: -93
我不确定&#34; TV&#34;设备很可能是我的iMac ..但它是日志显示的唯一一个。但同样,当我使用从商店下载的其他应用程序运行BLE扫描时,列表中会填充多个设备(包括我需要找到的设备)。所以我知道它不是我的手机本身,也不是蓝牙设备,因为使用其他应用程序很容易找到它。
我的代码中是否存在可防止多个设备被发现的内容?#34;通过这个回调?
提前感谢您对此提供任何帮助!