From b59934689ee113031538021064859863e7790ccd Mon Sep 17 00:00:00 2001 From: dosse91 Date: Thu, 29 Aug 2019 12:17:40 +0200 Subject: [PATCH] Suspend/resume BLE scanning at screen off/on --- .../java/com/dosse/airpods/PodsService.java | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/OpenPods/app/src/main/java/com/dosse/airpods/PodsService.java b/OpenPods/app/src/main/java/com/dosse/airpods/PodsService.java index 04c78aa..0a11ba7 100644 --- a/OpenPods/app/src/main/java/com/dosse/airpods/PodsService.java +++ b/OpenPods/app/src/main/java/com/dosse/airpods/PodsService.java @@ -312,7 +312,7 @@ public class PodsService extends Service { return null; } - private BroadcastReceiver btReceiver=null; + private BroadcastReceiver btReceiver=null, screenReceiver=null; /** * When the service is created, we register to get as many bluetooth and airpods related events as possible. @@ -398,6 +398,29 @@ public class PodsService extends Service { } },BluetoothProfile.HEADSET); if(ba.isEnabled())startAirPodsScanner(); //if BT is already on when the app is started, start the scanner without waiting for an event to happen + //Screen on/off listener to suspend scanning when the screen is off, to save battery + try{ + unregisterReceiver(screenReceiver); + }catch (Throwable t){} + IntentFilter screenIntentFilter = new IntentFilter(); + screenIntentFilter.addAction(Intent.ACTION_SCREEN_ON); + screenIntentFilter.addAction(Intent.ACTION_SCREEN_OFF); + screenReceiver=new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if(intent.getAction()==Intent.ACTION_SCREEN_OFF){ + Log.d(TAG,"SCREEN OFF"); + stopAirPodsScanner(); + }else if(intent.getAction()==Intent.ACTION_SCREEN_ON){ + Log.d(TAG,"SCREEN ON"); + BluetoothAdapter ba=((BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE)).getAdapter(); + if(ba.isEnabled())startAirPodsScanner(); + } + } + }; + try{ + registerReceiver(screenReceiver,screenIntentFilter); + }catch(Throwable t){} } private boolean checkUUID(BluetoothDevice bluetoothDevice){ @@ -419,6 +442,7 @@ public class PodsService extends Service { public void onDestroy() { super.onDestroy(); if(btReceiver!=null) unregisterReceiver(btReceiver); + if(screenReceiver!=null) unregisterReceiver(screenReceiver); } @Override