Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private static String HOUR = "hour";
- private static String MINUTE = "minute";
- public static void setAlarm(Context context, int hour, int minute){
- SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
- preferences.edit()
- .putInt(HOUR, hour)
- .putInt(MINUTE, minute)
- .apply();
- setAlarm(context);
- }
- private static void setAlarm(Context context) {
- int hour = getHour(context);
- int minute = getMinute(context);
- if(hour == -1 || minute == -1){
- //nenhum horário definido
- return;
- }
- // Cria um Calendar para o horário estipulado
- Calendar calendar = Calendar.getInstance();
- calendar.set(Calendar.HOUR_OF_DAY, hour);
- calendar.set(Calendar.MINUTE, minute);
- //Se já passou
- if(isDateBeforeNow(calendar)){
- //adiciona um dia
- calendar.add(Calendar.DAY_OF_MONTH, 1);
- }
- //PendingIntent para lançar o serviço
- Intent serviceIntent = new Intent(context, BootService.class);
- PendingIntent pendingIntent = PendingIntent.getService(context, 0, serviceIntent, 0);
- AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
- //Cancela um possível alarme existente
- alarmManager.cancel(pendingIntent);
- //Alarme que se repete todos os dias a uma determinada hora
- alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP,
- calendar.getTimeInMillis(),
- AlarmManager.INTERVAL_DAY,
- pendingIntent);
- }
- private static int getHour(Context context){
- SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
- return preferences.getInt(HOUR, -1);
- }
- private static int getMinute(Context context){
- SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
- return preferences.getInt(MINUTE, -1);
- }
- private static boolean isDateBeforeNow(Calendar calendar){
- return calendar.getTimeInMillis() <= System.currentTimeMillis();
- }
- @Override
- public void onReceive(Context context, Intent intent) {
- if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getClass())) {
- setAlarm(context);
- Toast.makeText(context, "Alarm set", Toast.LENGTH_LONG).show();
- }
- }
- }
- private PowerManager.WakeLock wakeLock;
- public BootService() {
- super("name");
- }
- @Override
- public void onCreate() {
- super.onCreate();
- PowerManager pm = (PowerManager) this.getSystemService(Context.POWER_SERVICE);
- wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK |
- PowerManager.ACQUIRE_CAUSES_WAKEUP |
- PowerManager.ON_AFTER_RELEASE, "BootService");
- wakeLock.acquire();
- }
- @Override
- protected void onHandleIntent(@Nullable Intent intent) {
- //Lance a notificação aqui.
- }
- @Override
- public void onDestroy() {
- super.onDestroy();
- if(wakeLock.isHeld()){
- //Verificou-se que o iluminar do ecrã
- //não acontecia devido ao WakeLock ser
- //rapidamente libertado(apesar de PowerManager.ON_AFTER_RELEASE !?).
- try {
- //Atrasa a libertação do WakeLock
- //de forma a permitir a iluminação do ecrâ.
- Thread.sleep(5000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- finally {
- wakeLock.release();
- }
- }
- }
Add Comment
Please, Sign In to add comment