我有一个设备可以传输有关汽车速度,转速等的广告数据(无法连接)。我的Android应用每10秒钟左右读取一次该数据。该应用将需要始终在后台读取数据。它可以正常工作约一个小时左右,但随后会停止工作。 ScanCallback方法停止调用,包括onScanResult和onScanFailed。
开始扫描的方法:
ScanSettings settings = new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.build();
scanner.startScan(null, settings, callback);
ScanCallback:
private ScanCallback mScanCallback = new ScanCallback() {
@Override
public void onScanResult(int callbackType, ScanResult result) {
//Update the UI with the latest info
final BluetoothDevice remoteDevice = result.getDevice();
final ScanRecord record = result.getScanRecord();
if(remoteDevice.getName() == null){
return;
}
else if(!remoteDevice.getName().equals("BT-ext")){
return;
}
//Post scan update to the UI thread
mHandler.post(new Runnable() {
@Override
public void run() {
updateScanResult(record);
}
});
}
@Override
public void onScanFailed(int errorCode) {
Log.w(TAG, "Error scanning devices: "+errorCode);
}
};
updateScanResult将执行一些ui工作,停止ble扫描,然后再次重新启动。我认为蓝牙已经溢出,这就是为什么我重新开始扫描。但是,它没有任何区别。
我已经在Pixel 3和Samsung S9上进行了测试,它们都过了一会儿就停止工作。我知道Android 7.0发生了蓝牙更改,但我认为这些限制不适用于此处。蓝牙由于被重置而无法运行超过30分钟。