在服务中创建一个WakeLock(唤醒锁),以确保屏幕关闭时CPU仍然处于活动状态。具体来说,可以按照以下步骤实现:
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyApp::MyWakelockTag");
@Override public void onCreate() { super.onCreate(); // 获取唤醒锁 wakeLock.acquire(); }
@Override public void onDestroy() { super.onDestroy(); // 释放唤醒锁 wakeLock.release(); }
@Override public int onStartCommand(Intent intent, int flags, int startId) { // 开始BLE扫描器 scanLeDevice(true); // 让服务保持运行状态 return START_STICKY; }
private void scanLeDevice(final boolean enable) { if (enable) { // 开始扫描 BluetoothLeScanner scanner = BluetoothAdapter.getDefaultAdapter().getBluetoothLeScanner(); scanner.startScan(callback); } else { // 停止扫描 BluetoothLeScanner scanner = BluetoothAdapter.getDefaultAdapter().getBluetoothLeScanner(); scanner.stopScan(callback); } }
通过上述步骤可以解决Android前台服务中的蓝牙LE扫描器在屏幕关闭后立即停止的问题。