para - ¿Cómo guardar la alarma programada después de que la aplicación fue eliminada por Android o el asesino de tareas?
descargar alarma para android (2)
La alarma activada por el administrador de alarmas no se cancela cuando se cierra la aplicación, sin embargo, cuando se produce un reinicio, el sistema operativo borra todas las alarmas, ya que no hay persistencia. Así que hay que hacer la persistencia.
- Cada vez que configure una alarma, guarde la hora de la alarma.
- Registre un receptor para completar el arranque.
Poner la alarma de nuevo al reiniciar.
public class BootReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //re register the alarm } }
Manifest.xml
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
.......
<receiver
android:name="BootReceiver"
android:enabled="true"
android:exported="true"
>
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
Puede usar SharedPreference para guardar la hora (la hora en que se debe activar la alarma o la hora en que se debe activar a continuación)
Utilícelo para establecer una nueva alarma en el receptor de arranque.
Código que programa la alarma.
PendingIntent sender = PendingIntent.getBroadcast(this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, time, sender);
Está funcionando bien, pero cuando maté a mi aplicación en Task Killer, perdí la alarma programada. ¿Cómo resolver este problema?
haga que su aplicación transmita un mensaje, ya que se está eliminando, y cuando este mensaje se transmita, haga que un oyente verifique si el servicio todavía se está ejecutando ... si no se ejecuta. Esto asegurará que su servicio se esté ejecutando incluso si la aplicación se cancela.
Actualizar
Intentaré crear un diagrama de flujo para ti
El método onDestroy () es parte de un servicio.
Espero que esto ayude.
ACTUALIZACIÓN 2
Una cosa que olvidé mencionar es el hecho de que idealmente solo desea que se ejecute una instancia del servicio. Entonces, solo mirando el ID que está presente dentro de onStart () debe ser == a 1 para iniciarlo de otra manera ... ignorarlo.
Métodos de notificación de la Clase de Servicio :
onStart (): este método se invoca cuando se inicia el servicio
onDestroy (): este es el método que se llama cuando se está eliminando un servicio
Métodos de aviso de la clase BroadcastReciever :
onReceive (): este método recibe todos los intentos que se le envían (a menos que se filtre)
Buscar ejemplos en BroadcastRecievers (transmisión de mensajes) y servicio (iniciar un servicio)
Referencias:
http://developer.android.com/reference/android/content/BroadcastReceiver.html
http://developer.android.com/reference/android/app/Service.html