2

我正在使用 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);
}

并从谷歌扫描LeDevice

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);
    }
}
  • 这是设备未处于睡眠状态时的工作。我曾尝试使用 AlarmManager,但重复警报的最短时间为 1 分钟。
  • TimerTask 在睡眠模式下不起作用。
  • 处理程序在睡眠模式下不起作用。

我想使用 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);
}

它只在第一次工作。在我读过的各种帖子中:“不可能多次获取唤醒锁并释放”。谢谢你。

4

0 回答 0