Guest User

Untitled

a guest
May 26th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.46 KB | None | 0 0
  1. private static String HOUR = "hour";
  2. private static String MINUTE = "minute";
  3.  
  4.  
  5. public static void setAlarm(Context context, int hour, int minute){
  6. SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
  7. preferences.edit()
  8. .putInt(HOUR, hour)
  9. .putInt(MINUTE, minute)
  10. .apply();
  11. setAlarm(context);
  12. }
  13.  
  14.  
  15.  
  16. private static void setAlarm(Context context) {
  17.  
  18. int hour = getHour(context);
  19. int minute = getMinute(context);
  20.  
  21. if(hour == -1 || minute == -1){
  22. //nenhum horário definido
  23. return;
  24. }
  25.  
  26. // Cria um Calendar para o horário estipulado
  27. Calendar calendar = Calendar.getInstance();
  28. calendar.set(Calendar.HOUR_OF_DAY, hour);
  29. calendar.set(Calendar.MINUTE, minute);
  30.  
  31. //Se já passou
  32. if(isDateBeforeNow(calendar)){
  33. //adiciona um dia
  34. calendar.add(Calendar.DAY_OF_MONTH, 1);
  35. }
  36.  
  37.  
  38. //PendingIntent para lançar o serviço
  39. Intent serviceIntent = new Intent(context, BootService.class);
  40. PendingIntent pendingIntent = PendingIntent.getService(context, 0, serviceIntent, 0);
  41.  
  42. AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
  43. //Cancela um possível alarme existente
  44. alarmManager.cancel(pendingIntent);
  45.  
  46. //Alarme que se repete todos os dias a uma determinada hora
  47. alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP,
  48. calendar.getTimeInMillis(),
  49. AlarmManager.INTERVAL_DAY,
  50. pendingIntent);
  51. }
  52.  
  53. private static int getHour(Context context){
  54. SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
  55. return preferences.getInt(HOUR, -1);
  56. }
  57. private static int getMinute(Context context){
  58. SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
  59. return preferences.getInt(MINUTE, -1);
  60. }
  61.  
  62. private static boolean isDateBeforeNow(Calendar calendar){
  63. return calendar.getTimeInMillis() <= System.currentTimeMillis();
  64. }
  65.  
  66. @Override
  67. public void onReceive(Context context, Intent intent) {
  68.  
  69.  
  70. if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getClass())) {
  71. setAlarm(context);
  72. Toast.makeText(context, "Alarm set", Toast.LENGTH_LONG).show();
  73. }
  74.  
  75. }
  76. }
  77.  
  78. private PowerManager.WakeLock wakeLock;
  79.  
  80. public BootService() {
  81. super("name");
  82. }
  83.  
  84. @Override
  85. public void onCreate() {
  86. super.onCreate();
  87.  
  88. PowerManager pm = (PowerManager) this.getSystemService(Context.POWER_SERVICE);
  89. wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK |
  90. PowerManager.ACQUIRE_CAUSES_WAKEUP |
  91. PowerManager.ON_AFTER_RELEASE, "BootService");
  92. wakeLock.acquire();
  93. }
  94.  
  95. @Override
  96. protected void onHandleIntent(@Nullable Intent intent) {
  97.  
  98. //Lance a notificação aqui.
  99. }
  100.  
  101. @Override
  102. public void onDestroy() {
  103. super.onDestroy();
  104. if(wakeLock.isHeld()){
  105. //Verificou-se que o iluminar do ecrã
  106. //não acontecia devido ao WakeLock ser
  107. //rapidamente libertado(apesar de PowerManager.ON_AFTER_RELEASE !?).
  108. try {
  109. //Atrasa a libertação do WakeLock
  110. //de forma a permitir a iluminação do ecrâ.
  111. Thread.sleep(5000);
  112. } catch (InterruptedException e) {
  113. e.printStackTrace();
  114. }
  115. finally {
  116. wakeLock.release();
  117. }
  118. }
  119. }
Add Comment
Please, Sign In to add comment