首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何重新启动BluetoothLeScanner?

如何重新启动BluetoothLeScanner?
EN

Stack Overflow用户
提问于 2015-03-06 12:31:33
回答 1查看 6.5K关注 0票数 4

我正在使用安卓端的BluetoothLeScanner将安卓设备连接到BluetoothLeScanner上。这是第一次完美的运作。

问题是,当我连接到一个已发现的iOS设备后,我停止扫描(stopScan(scanCallback))以保存能量。

如果之前连接的设备因某些原因断开,我会再次启动扫描.但似乎在“重新启动”扫描不再工作-它没有发现更多的设备.不知道为什么,但我不得不重新启动应用程序。

有什么办法解决这个问题吗?

我还使用ScanFilter通过UUID过滤设备,并使用ScanSettings.SCAN_MODE_BALANCED作为扫描模式。

以下是代码:

代码语言:javascript
复制
private void startScanner() {
    BluetoothManager bluetoothManager = (BluetoothManager) activity.getSystemService(activity.BLUETOOTH_SERVICE);
    BluetoothAdapter adapter = bluetoothManager.getAdapter();
    scanner = adapter.getBluetoothLeScanner();
    ScanSettings settings = new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_BALANCED).build();
    scanner.startScan(scanFilters(), settings, scanCallback);
    System.out.println("Scanner started");
}

private List<ScanFilter> scanFilters() {
    ScanFilter filter = new ScanFilter.Builder().setServiceUuid(THE_BT_UUID).build();
    List<ScanFilter> list = new ArrayList<ScanFilter>(1);
    list.add(filter);
    return list;
}



private final ScanCallback scanCallback = new ScanCallback() {
    @Override
    public void onScanResult(int callbackType, ScanResult result) {
        BluetoothDevice device = result.getDevice();
        if (device != null) {
            callback.foundRemoteDevice(BluetoothCentral.this, device);
        }
    }
}


public void connectToDevice(BluetoothDevice device) {
    if (gatt == null) {
        gatt = device.connectGatt(activity, false, gattCallback);
        scanner.stopScan(scanCallback);
    }
}


private final BluetoothGattCallback gattCallback = new BluetoothGattCallback() {
    @Override
    public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
        System.out.println("onConnectionStateChange; status: " + status + ", state: " + newState);

        switch (newState) {
            case BluetoothProfile.STATE_CONNECTED:
                System.out.println("STATE_CONNECTED");
                if (!startedServiceDiscovery) {
                    gatt.discoverServices();
                    startedServiceDiscovery = true;
                }
                break;
            case BluetoothProfile.STATE_DISCONNECTED:
                callback.didDisconnectFromDevice(BluetoothCentral.this, gatt.getDevice());
                gatt = null;
                startScanner();
                break;
            default:
                System.out.println("STATE_OTHER");
        }

    }
}

请注意,我在connectGatt调用之后立即停止扫描程序,并在得到BluetoothProfile.STATE_DISCONNECTED回调时再次启动它。

EN

回答 1

Stack Overflow用户

发布于 2015-03-09 17:31:18

作为我的评论,帮助你解决这个问题,我在这里补充我的评论作为一个答案。

在我看来,代码似乎没问题,您是否尝试过在onScanResult方法中添加日志。检查设备是否被检测到,但其他设备正在失败。还有一件事,我看到如果我重新启动扫描,它需要时间来让设备检测到与第一次扫描相比。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28898861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档