我正在开发一个使用ble的Android应用程序。 我希望每10秒安排一次扫描。它工作,但当我的设备在后台时,它不起作用。
在Oncreate()中我调用StartHandler();
public class MyService extends Service{
......
....
public void StartHandler(){
handlerScan = new Handler();
handlerScan.postDelayed(new Runnable() {
public void run() {
if (!STOP) {
scanLeDevice(true);
handlerScan.postDelayed(this, 8000);
}else{
handlerScan.postDelayed(this, 3000);
}
}
}, 500);
}
和来自Google的scanLeDevice
public void scanLeDevice(final boolean enable) {
if(mLeScanCallback == null){
mBluetoothManager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
mBluetoothAdapter = mBluetoothManager.getAdapter();
try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); }
}
if (enable) {
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
mScanning = false;
mBluetoothAdapter.stopLeScan(mLeScanCallback);
}
}, 3000);
mScanning = true;
mBluetoothAdapter.startLeScan(mLeScanCallback);
} else {
mScanning = false;
mBluetoothAdapter.stopLeScan(mLeScanCallback);
}
}
我认为使用WakeLock但是如果我在这里获得它:
public void StartHandler(){
handlerScan = new Handler();
handlerScan.postDelayed(new Runnable() {
public void run() {
if (!STOP) {
wakelock.acquire();
scanLeDevice(true);
handlerScan.postDelayed(this, 8000);
}else{
handlerScan.postDelayed(this, 3000);
}
}
}, 500);
}
并在scanLeDevice中释放我的唤醒锁
public void run() {
mScanning = false;
wakelock.release();
mBluetoothAdapter.stopLeScan(mLeScanCallback);
}
它只是第一次工作。在各种帖子中我读过:“不可能获得唤醒锁并多次发布”。 谢谢。