Set alarms with setExactAndAllowWhileIdle()

This commit is contained in:
Trevor Slocum 2019-04-29 07:26:41 -07:00
parent cdacf1ff50
commit bcfa85e0c1
4 changed files with 26 additions and 79 deletions

View File

@ -1,6 +1,5 @@
package sh.ftp.rocketninelabs.meditationassistant;
import android.app.AlarmManager;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
@ -124,21 +123,8 @@ public class DailyReminderReceiver extends BroadcastReceiver {
PendingIntent.FLAG_CANCEL_CURRENT
);
if (Build.VERSION.SDK_INT >= 23) {
/* Don't use setAlarmClock here as it will always place an alarm icon in the status bar */
getMeditationAssistant().reminderAlarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(),
getMeditationAssistant().reminderPendingIntent);
} else if (Build.VERSION.SDK_INT >= 19) {
getMeditationAssistant().reminderAlarmManager.setExact(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(),
getMeditationAssistant().reminderPendingIntent);
} else {
getMeditationAssistant().reminderAlarmManager.set(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(),
getMeditationAssistant().reminderPendingIntent);
}
/* Don't use setAlarmClock here as it will always place an alarm icon in the status bar */
getMeditationAssistant().setAlarm(false, calendar.getTimeInMillis(), getMeditationAssistant().reminderPendingIntent);
Log.d("MeditationAssistant", "Set daily reminder alarm for " + calendar.toString());
}

View File

@ -7,11 +7,8 @@ import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class DatabaseHandler extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 5;

View File

@ -13,7 +13,6 @@ import android.content.res.Configuration;
import android.content.res.Resources;
import android.media.AudioManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
@ -146,15 +145,8 @@ public class MainActivity extends Activity implements OnShowcaseEventListener {
getApplicationContext(), ID_INTERVAL,
intent_interval, PendingIntent.FLAG_CANCEL_CURRENT);
am_interval = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
if (Build.VERSION.SDK_INT >= 23) {
am_interval.setAlarmClock(new AlarmManager.AlarmClockInfo(cal.getTimeInMillis(), PendingIntent.getActivity(MainActivity.this, 0, new Intent(MainActivity.this, MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT)), pendingintent_interval);
} else if (Build.VERSION.SDK_INT >= 19) {
am_interval.setExact(AlarmManager.RTC_WAKEUP,
cal.getTimeInMillis(), pendingintent_interval);
} else {
am_interval.set(AlarmManager.RTC_WAKEUP,
cal.getTimeInMillis(), pendingintent_interval);
}
getMeditationAssistant().setAlarm(true, cal.getTimeInMillis(), pendingintent_interval);
handler.postDelayed(this, interval * 1000);
}
}
@ -1208,20 +1200,11 @@ public class MainActivity extends Activity implements OnShowcaseEventListener {
pendingintent = PendingIntent.getActivity(
getApplicationContext(), ID_END, intent,
PendingIntent.FLAG_CANCEL_CURRENT);
am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
if (Build.VERSION.SDK_INT >= 23) {
am.setAlarmClock(new AlarmManager.AlarmClockInfo(cal.getTimeInMillis(), PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT)), pendingintent);
} else if (Build.VERSION.SDK_INT >= 19) {
am.setExact(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
pendingintent);
} else {
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
pendingintent);
}
Log.d("MeditationAssistant", "Setting MAIN WAKEUP alarm for "
+ String.valueOf(cal.getTimeInMillis()) + " (Now: "
+ System.currentTimeMillis() + ", in: " + String.valueOf((cal.getTimeInMillis() - System.currentTimeMillis()) / 1000) + ")");
getMeditationAssistant().setAlarm(true, cal.getTimeInMillis(), pendingintent);
}
getMeditationAssistant().ispaused = false;
@ -1362,20 +1345,11 @@ public class MainActivity extends Activity implements OnShowcaseEventListener {
pendingintent = PendingIntent.getActivity(
getApplicationContext(), ID_END, intent,
PendingIntent.FLAG_CANCEL_CURRENT);
am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
if (Build.VERSION.SDK_INT >= 23) {
am.setAlarmClock(new AlarmManager.AlarmClockInfo(cal.getTimeInMillis(), PendingIntent.getActivity(MainActivity.this, 0, new Intent(MainActivity.this, MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT)), pendingintent);
} else if (Build.VERSION.SDK_INT >= 19) {
am.setExact(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
pendingintent);
} else {
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
pendingintent);
}
Log.d("MeditationAssistant", "Setting MAIN WAKEUP alarm for "
+ String.valueOf(cal.getTimeInMillis()) + " (Now: "
+ System.currentTimeMillis() + ", in: " + String.valueOf((cal.getTimeInMillis() - System.currentTimeMillis()) / 1000) + ")");
getMeditationAssistant().setAlarm(true, cal.getTimeInMillis(), pendingintent);
}
if (!skipDelay) {
@ -1438,16 +1412,7 @@ public class MainActivity extends Activity implements OnShowcaseEventListener {
pendingintent_delay = PendingIntent.getActivity(
getApplicationContext(), ID_DELAY, intent_delay,
PendingIntent.FLAG_CANCEL_CURRENT);
am_delay = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
if (Build.VERSION.SDK_INT >= 23) {
am_delay.setAlarmClock(new AlarmManager.AlarmClockInfo(cal.getTimeInMillis(), PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT)), pendingintent_delay);
} else if (Build.VERSION.SDK_INT >= 19) {
am_delay.setExact(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
pendingintent_delay);
} else {
am_delay.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
pendingintent_delay);
}
getMeditationAssistant().setAlarm(true, cal.getTimeInMillis(), pendingintent_delay);
} else {
handler.postDelayed(meditateRunnable, 50);
}
@ -1476,16 +1441,7 @@ public class MainActivity extends Activity implements OnShowcaseEventListener {
pendingintent_interval = PendingIntent.getActivity(
getApplicationContext(), ID_INTERVAL,
intent_interval, PendingIntent.FLAG_CANCEL_CURRENT);
am_interval = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
if (Build.VERSION.SDK_INT >= 23) {
am_interval.setAlarmClock(new AlarmManager.AlarmClockInfo(cal.getTimeInMillis(), PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT)), pendingintent_interval);
} else if (Build.VERSION.SDK_INT >= 19) {
am_interval.setExact(AlarmManager.RTC_WAKEUP,
cal.getTimeInMillis(), pendingintent_interval);
} else {
am_interval.set(AlarmManager.RTC_WAKEUP,
cal.getTimeInMillis(), pendingintent_interval);
}
getMeditationAssistant().setAlarm(true, cal.getTimeInMillis(), pendingintent_interval);
}
}
@ -1906,16 +1862,7 @@ public class MainActivity extends Activity implements OnShowcaseEventListener {
pendingintent_interval = PendingIntent.getActivity(
getApplicationContext(), ID_INTERVAL,
intent_interval, PendingIntent.FLAG_CANCEL_CURRENT);
am_interval = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
if (Build.VERSION.SDK_INT >= 23) {
am_interval.setAlarmClock(new AlarmManager.AlarmClockInfo(cal.getTimeInMillis(), PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT)), pendingintent_interval);
} else if (Build.VERSION.SDK_INT >= 19) {
am_interval.setExact(AlarmManager.RTC_WAKEUP,
cal.getTimeInMillis(), pendingintent_interval);
} else {
am_interval.set(AlarmManager.RTC_WAKEUP,
cal.getTimeInMillis(), pendingintent_interval);
}
getMeditationAssistant().setAlarm(true, cal.getTimeInMillis(), pendingintent_interval);
} else {
Log.d("MeditationAssistant", "Skipping INTERVAL WAKEUP alarm");
}

View File

@ -121,6 +121,7 @@ public class MeditationAssistant extends Application {
private Integer webview_scale = null;
private String timerMode = null;
private SharedPreferences prefs = null;
private AlarmManager am;
private WakeLocker wakeLocker = new WakeLocker();
String pausedTimerHoursMinutes;
String pausedTimerSeconds;
@ -310,6 +311,22 @@ public class MeditationAssistant extends Application {
}
}
public void setAlarm(boolean allowAlarmClock, long triggerAtMillis, PendingIntent pendingIntent) {
if (am == null) {
am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
}
if (Build.VERSION.SDK_INT >= 23) {
am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, triggerAtMillis, pendingIntent);
} else if (Build.VERSION.SDK_INT >= 21 && allowAlarmClock) {
am.setAlarmClock(new AlarmManager.AlarmClockInfo(triggerAtMillis, PendingIntent.getActivity(this, 0, new Intent(getApplicationContext(), MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT)), pendingIntent);
} else if (Build.VERSION.SDK_INT >= 19) {
am.setExact(AlarmManager.RTC_WAKEUP, triggerAtMillis, pendingIntent);
} else {
am.set(AlarmManager.RTC_WAKEUP, triggerAtMillis, pendingIntent);
}
}
public void setNotificationControl() {
previousRingerFilter = getRingerFilter();
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);