我在 Android 中有以下服务
public class MyService extends Service{
....
@Override
public void onCreate() {
....
StartHandler();
....}
public void StartHandler(){
handlerScan = new Handler();
handlerScan.postDelayed(new Runnable() {
public void run() {
if (!STOP) {
scanLeDevice(true);
handlerScan.postDelayed(this, 8000);
}else{
mBluetoothManager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
mBluetoothAdapter = mBluetoothManager.getAdapter();
handlerScan.postDelayed(this, 3000);
}
}
}, 500);
}
.....
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);
}
}
....
问题:如果我使用 API < 21,它有时会在后台工作,但如果我在显示关闭时使用新的 API > 21 (MLEScanner),它就不起作用。为什么?这是一个错误吗?
问题:在我的 StartHandler 中,我想获取 3 秒的唤醒锁并释放。认为, StartHandler 重复。Wakelock 只在第一次工作。如何解决这个问题?有一个在 startlescan 上获取唤醒锁并在 stoplescan 中释放它的解决方案吗?
我不想使用 AlarmManager 为什么我需要延迟处理程序。谢谢