Android 4.4 BLE - 只能看到一个设备

时间:2016-02-03 20:10:14

标签: android bluetooth bluetooth-lowenergy android-bluetooth

我正在运行一个简单的测试来连接自定义蓝牙设备。我正在使用运行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;通过这个回调?

提前感谢您对此提供任何帮助!

0 个答案:

没有答案