android 重启蓝牙代码,android – 如何重启BluetoothLeScanner?

我在Android端使用BluetoothLeScanner将Android设备连接到iOS.这一切都是第一次完美运作.

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

如果以后连接设备由于某种原因断开连接我再次开始扫描…但似乎在’重新启动’扫描后不再工作 – 它没有发现任何更多的设备…不知道为什么但我被迫重新启动应用程序.

任何想法如何解决这一问题?

我也使用ScanFilter按UUID过滤设备,并使用ScanSettings.SCAN_MODE_BALANCED进行扫描模式.

这是代码:

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 scanFilters() {

ScanFilter filter = new ScanFilter.Builder().setServiceUuid(THE_BT_UUID).build();

List list = new ArrayList(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回调时再次启动它.

解决方法:

正如我的评论,帮助您解决问题,我在这里添加我的评论作为答案.

Code seems ok to me, did you try adding logs in onScanResult method.

to check if device is getting detected but something else is failing.

One more thing, I see if I restart scanning it takes time to get the

device detected in comparison of first scanning.

标签:android,bluetooth,bluetooth-lowenergy,android-bluetooth

来源: https://codeday.me/bug/20190702/1361147.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值