深度睡眠时BLE API> = 21

时间:2016-05-29 10:29:13

标签: android android-wake-lock android-ble

我在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);
        }
    }
....
  1. 问题: 如果我使用API​​< 21它有时在后台工作,但如果我使用新的API> 21(MLEScanner)当显示器关闭时它不起作用。为什么?这是一个错误吗?

  2. 问题: 在我的StartHandler中,我希望获得wakelock 3秒并发布。考虑,重复StartHandler。 Wakelock第一次工作。 怎么解决这个?有一个解决方案可以在startlescan上获取唤醒锁并在stoplescan中释放它吗?

  3. 我不想使用AlarmManager为什么我需要一个postdelayed处理程序。谢谢

0 个答案:

没有答案