Skip to content

Commit 0ca439a

Browse files
committed
Request battery optimization exemption on launch to survive aggressive OEM battery killers
1 parent 02f1dee commit 0ca439a

2 files changed

Lines changed: 13 additions & 0 deletions

File tree

work_timer/android/app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
55
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE"/>
66
<uses-permission android:name="android.permission.WAKE_LOCK"/>
7+
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
78
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" android:maxSdkVersion="32"/>
89
<uses-permission android:name="android.permission.USE_EXACT_ALARM"/>
910
<application

work_timer/android/app/src/main/kotlin/com/utsapoddar/sift/MainActivity.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,11 @@ import android.content.Context
66
import android.content.Intent
77
import android.content.IntentFilter
88
import android.content.pm.PackageManager
9+
import android.net.Uri
910
import android.os.Build
1011
import android.os.Bundle
12+
import android.os.PowerManager
13+
import android.provider.Settings
1114
import androidx.core.app.ActivityCompat
1215
import androidx.core.content.ContextCompat
1316
import io.flutter.embedding.android.FlutterActivity
@@ -79,6 +82,15 @@ class MainActivity : FlutterActivity() {
7982
ActivityCompat.requestPermissions(
8083
this, arrayOf(Manifest.permission.POST_NOTIFICATIONS), 1001)
8184
}
85+
// Request battery optimization exemption so the timer survives on aggressive OEMs
86+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
87+
val pm = getSystemService(Context.POWER_SERVICE) as PowerManager
88+
if (!pm.isIgnoringBatteryOptimizations(packageName)) {
89+
startActivity(Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).apply {
90+
data = Uri.parse("package:$packageName")
91+
})
92+
}
93+
}
8294
val filter = IntentFilter().apply {
8395
addAction(TimerService.ACTION_STOP)
8496
addAction(TimerService.ACTION_SILENCE)

0 commit comments

Comments
 (0)