我试图在我的安卓应用程序中多次调用startLeScan方法,它第一次扫描BLE设备,从第二次开始它不能扫描设备。我在我的应用程序中有循环扫描,每10秒停止扫描一次,然后重新开始。下面是一些日志,它们显示了我的应用程序的行为。
05-20 00:45:31.146 15841-15841/XXXXX D/BluetoothAdapter﹕ stopLeScan()
05-20 00:45:31.147 15841-15841/XXXXX D/BluetoothAdapter﹕ startLeScan(): null
05-20 00:45:31.160 15841-15852/XXXXX D/BluetoothAdapter﹕ onClientRegistered() - status=133 clientIf=0
05-20 00:45:31.161 15841-15841/XXXXX D/BluetoothAdapter﹕ stopLeScan()
05-20 00:45:31.165 15841-15841/XXXXX D/BluetoothAdapter﹕ startLeScan(): null
05-20 00:45:31.169 15841-15909/XXXXX D/BluetoothAdapter﹕ onClientRegistered() - status=0 clientIf=7
05-20 00:45:31.171 15841-15841/XXXXX D/BluetoothAdapter﹕ stopLeScan()
05-20 00:45:31.175 15841-15841/XXXXX D/BluetoothAdapter﹕ startLeScan(): null
05-20 00:45:31.179 15841-15853/XXXXX D/BluetoothAdapter﹕ onClientRegistered() - status=0 clientIf=8
05-20 00:45:31.181 15841-15841/XXXXX D/BluetoothAdapter﹕ stopLeScan()
05-20 00:45:31.185 15841-15841/XXXXX D/BluetoothAdapter﹕ startLeScan(): null
05-20 00:45:31.189 15841-18615/XXXXX D/BluetoothAdapter﹕ onClientRegistered() - status=0 clientIf=6
05-20 00:45:31.191 15841-15841/XXXXX D/BluetoothAdapter﹕ stopLeScan()
05-20 00:45:31.192 15841-15841/XXXXX D/BluetoothAdapter﹕ startLeScan(): null
05-20 00:45:31.202 15841-15852/XXXXX D/BluetoothAdapter﹕ onClientRegistered() - status=133 clientIf=0
05-20 00:45:31.203 15841-15841/XXXXX D/BluetoothAdapter﹕ stopLeScan()
05-20 00:45:31.207 15841-15841/XXXXX D/BluetoothAdapter﹕ startLeScan(): null
05-20 00:45:31.211 15841-15909/XXXXX D/BluetoothAdapter﹕ onClientRegistered() - status=0 clientIf=10
我在我的BluetothLEScanerForMR2.java中有这些函数调用,当我多次调用startScan方法时,我得到了上面的日志。
protected void startScan() {
if (getBluetoothAdapter() != null) {
if (getBluetoothAdapter().isEnabled()) {
getBluetoothAdapter().startLeScan(mLeScanCallback);
mScanStopTime = new Date().getTime() + mScanPeriod;
mScanning = true;
handleIntervalScanning();
}
}
}
protected void stopScan() {
if (getBluetoothAdapter() != null) {
if (getBluetoothAdapter().isEnabled()) {
getBluetoothAdapter().stopLeScan(mLeScanCallback);
mScanning = false;
}
}
}
private void handleIntervalScanning() {
long msUntilNextStop = mScanStopTime - (new Date().getTime());
if (msUntilNextStop > mScanPeriod)
msUntilNextStop = mScanPeriod;
if (msUntilNextStop > 0) {
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
handleIntervalScanning();
}
}, msUntilNextStop);
} else {
if (getBluetoothAdapter() != null) {
if (getBluetoothAdapter().isEnabled()) {
if (mScanning) {
getBluetoothAdapter().stopLeScan(mLeScanCallback);
startScan();
}
}
}
}
}
发布于 2018-06-09 07:12:44
这是一个老帖子,但我想我会评论一下,以防其他人需要帮助。在您的代码中,您将获得BlueToothAdapter的一个实例,并调用startscan method...but,但您并没有持久化该适配器实例。然后在您的stopscan方法中,创建一个蓝牙适配器的新实例,并调用它的stop scan。我认为当您“获取”适配器,然后使用适配器的相同实例(通过内存变量)停止扫描时,需要将适配器保存到内存变量中。
https://stackoverflow.com/questions/30335534
复制相似问题