[Из песочницы] 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Пример кода с вызовом после перезагрузки (не оптимальный нужно дорабатывать): В манифесте прописываем:
} }
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);