diff --git a/app/build.gradle b/app/build.gradle index 13fbb347..30b1622c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -22,8 +22,8 @@ android { applicationId "app.opass.ccip" minSdk 24 targetSdk 34 - versionCode 51 - versionName "3.2.7" + versionCode 52 + versionName "3.2.8" manifestPlaceholders = [manifestApplicationId: "${applicationId}"] } diff --git a/app/src/main/java/app/opass/ccip/util/AlarmUtil.kt b/app/src/main/java/app/opass/ccip/util/AlarmUtil.kt index 8d0a3211..8f829ce6 100644 --- a/app/src/main/java/app/opass/ccip/util/AlarmUtil.kt +++ b/app/src/main/java/app/opass/ccip/util/AlarmUtil.kt @@ -4,7 +4,9 @@ import android.app.AlarmManager import android.app.PendingIntent import android.content.Context import android.content.Intent +import android.net.Uri import android.os.Build +import android.provider.Settings import app.opass.ccip.model.Session import app.opass.ccip.ui.sessiondetail.SessionDetailActivity import com.google.gson.internal.bind.util.ISO8601Utils @@ -27,13 +29,31 @@ object AlarmUtil { .getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE) val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager + + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { alarmManager.setExact( AlarmManager.RTC_WAKEUP, calendar.timeInMillis - 10 * 60 * 1000, pendingIntent ) - } else { + } + else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + when { + alarmManager.canScheduleExactAlarms() -> { + alarmManager.setExactAndAllowWhileIdle( + AlarmManager.RTC_WAKEUP, + calendar.timeInMillis - 10 * 60 * 1000, + pendingIntent + ) + } + else -> { + var uri = Uri.parse("package:" + context.packageName) + context.startActivity(Intent(Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM, uri)) + } + } + } + else { alarmManager.setExactAndAllowWhileIdle( AlarmManager.RTC_WAKEUP, calendar.timeInMillis - 10 * 60 * 1000,