[Из песочницы] FAQ по программированию под Android от новичка, и для новичков

www.mobilab.ru/androiddev/androidalarmmanagertutorial.htmlstackoverflow.com/questions/3052149/using-alarmmanager-to-start-a-service-at-specific-timedeveloper.android.com/reference/android/app/AlarmManager.htmlstackoverflow.com/questions/2844274/multiple-calls-to-alarmmanager-setrepeating-deliver-the-same-intent-pendingintenВозобновление после перезагрузки: stackoverflow.com/questions/12512717/android-alarmmanager-after-rebootgithub.com/commonsguy/cw-omnibus/blob/master/AlarmManager/Scheduled/src/com/commonsware/android/schedsvc/PollReceiver.javastackoverflow.com/questions/4315611/android-get-all-pendingintents-set-with-alarmmanagerПример кода с вызовом после перезагрузки (не оптимальный нужно дорабатывать): В манифесте прописываем:

BootReceiver.java public class BootReceiver extends BroadcastReceiver { @Override public void onReceive (Context context, Intent intent) { AlarmManagerBroadcastReceiver.setTime=3; PowerManager pm = (PowerManager) context.getSystemService (Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock (PowerManager.PARTIAL_WAKE_LOCK, «EyeGuard»); SetAlarm (context);

} }

public void SetAlarm (Context context) { //Toast.makeText (context, «SetAlarm», 10).show (); AlarmManager am=(AlarmManager)context.getSystemService (Context.ALARM_SERVICE); Intent intent = new Intent (context, AlarmManagerBroadcastReceiver.class); intent.putExtra (AlarmManagerBroadcastReceiver.ONE_TIME, Boolean.FALSE); PendingIntent pi = PendingIntent.getBroadcast (context, 0, intent, 0); //After after 30 seconds am.setRepeating (AlarmManager.RTC_WAKEUP, System.currentTimeMillis (), 1000 * AlarmManagerBroadcastReceiver.setTime *60, pi); /// 1000 }

public void CancelAlarm (Context context) { // Toast.makeText (context, «CancelAlarm», Toast.LENGTH_LONG).show (); Intent intent = new Intent (context, AlarmManagerBroadcastReceiver.class); PendingIntent sender = PendingIntent.getBroadcast (context, 0, intent, 0); AlarmManager alarmManager = (AlarmManager) context.getSystemService (Context.ALARM_SERVICE); alarmManager.cancel (sender); } }

AlarmManagerBroadcastReceiver.java public class AlarmManagerBroadcastReceiver extends BroadcastReceiver {

@Override public void onReceive (Context context, Intent intent) {

AlarmManagerBroadcastReceiver.setTime=3; PowerManager pm = (PowerManager) context.getSystemService (Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock ((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), «EyeGuard»); wl.acquire (10000); //Засыпает через 10 секунд

//Здесь свой код // } public void SetAlarm (Context context) { AlarmManager am=(AlarmManager)context.getSystemService (Context.ALARM_SERVICE); Intent intent = new Intent (context, AlarmManagerBroadcastReceiver.class); intent.putExtra (ONE_TIME, Boolean.FALSE); PendingIntent pi = PendingIntent.getBroadcast (context, 0, intent, 0); am.setRepeating (AlarmManager.RTC_WAKEUP, System.currentTimeMillis (), 1000 *setTime *setTime2, pi); /// 1000×25 *60 }

public void CancelAlarm (Context context) { Intent intent = new Intent (context, AlarmManagerBroadcastReceiver.class); PendingIntent sender = PendingIntent.getBroadcast (context, 0, intent, 0); AlarmManager alarmManager = (AlarmManager) context.getSystemService (Context.ALARM_SERVICE); alarmManager.cancel (sender); } public void setOnetimeTimer (Context context){ AlarmManager am=(AlarmManager)context.getSystemService (Context.ALARM_SERVICE); Intent intent = new Intent (context, AlarmManagerBroadcastReceiver.class); intent.putExtra (ONE_TIME, Boolean.TRUE); PendingIntent pi = PendingIntent.getBroadcast (context, 0, intent, 0); am.set (AlarmManager.RTC_WAKEUP, System.currentTimeMillis (), pi); } } В активити из которой вызываемПрописываем private AlarmManagerBroadcastReceiver alarm; В onCreate:

alarm = new AlarmManagerBroadcastReceiver (); Добавляем процедуры: public void startRepeatingTimer (View view) { // Toast.makeText (this, «startRepeatingTimer», 30).show (); Context context = this.getApplicationContext (); if (alarm!= null){ alarm.SetAlarm (context); }else{ //Toast.makeText (context, «Alarm is null», Toast.LENGTH_SHORT).show (); } }

public void cancelRepeatingTimer (View view){ // Toast.makeText (this, «cancelRepeatingTimer», 30).show (); Context context = this.getApplicationContext (); if (alarm!= null){ alarm.CancelAlarm (context); }else{ // Toast.makeText (context, «Alarm is null», Toast.LENGTH_SHORT).show (); } } Вызов осуществляем: startRepeatingTimer (v); Отменяем: cancelRepeatingTimer (v);

© Habrahabr.ru