Inicie la aplicación en un momento específico

Me preguntaba si es posible (y si es así) iniciar mi aplicación en un momento específico, algo así como un reloj de alarma que se activa en un momento específico. Digamos que quiero que mi aplicación se inicie a las 8 de la mañana, ¿es eso posible?

Puedes hacerlo con AlarmManager, aquí hay un pequeño ejemplo. Primero debes configurar la alarma:

AlarmManager am = (AlarmManager) con.getSystemService(Context.ALARM_SERVICE); Date futureDate = new Date(new Date().getTime() + 86400000); futureDate.setHours(8); futureDate.setMinutes(0); futureDate.setSeconds(0); Intent intent = new Intent(con, MyAppReciever.class); PendingIntent sender = PendingIntent.getBroadcast(con, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); am.set(AlarmManager.RTC_WAKEUP, futureDate.getTimeInMillis(), sender); 

A continuación, debe crear un receptor con algún código para ejecutar su aplicación: (es decir, iniciar su aplicación):

 public class MyAppReciever extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { startActivity(new Intent(context, MyAppMainActivity.class)); } } 

Probablemente esté buscando AlarmManager , que le permite iniciar servicios / actividades / enviar transmisiones a intervalos específicos o en un momento determinado, repitiendo o no. Así es como escribes servicios de fondo amigables con la memoria en Android. AlarmManager es algo así como cron en Unix. Permite que el servicio en segundo plano inicie, haga su trabajo y se quede sin memoria.

Probablemente no desee iniciar una actividad (si eso es lo que quiso decir con “aplicación”). Si desea alertar al usuario de que algo ha sucedido, agregue una alarma que inicie un receptor en un momento dado y haga que el receptor agregue una notificación. La notificación puede abrir la aplicación cuando se hace clic. Eso es menos invasivo que llevar alguna actividad potencialmente no deseada al primer plano.

hay un tutorial muy bueno: http://www.javacodegeeks.com/2012/09/android-alarmmanager-tutorial.html

aquí está el c & p:

Tutorial de Android AlarmManager de Rakesh Cusat el 20 de septiembre de 2012 | Archivado en: Android Core

Al escribir una aplicación, surge la necesidad de progtwigr la ejecución del código en el futuro. Puede requerir que AlarmManager programe su trabajo a una hora específica. AlarmManager accede a la alarma del sistema y progtwig la ejecución del código incluso cuando la aplicación no se está ejecutando. Información del proyecto: metainformación sobre el proyecto. Versión de la plataforma: Android API Level 10. IDE: Eclipse Helios Service Release 2 Emulator: Android 4.1

Requisito previo: conocimiento preliminar del marco de aplicación de Android y receptor de Intent Broadcast.

AlarmManager:

AlarmManager tiene acceso a los servicios de alarma del sistema. Con la ayuda de AlarmManager puede progtwigr la ejecución del código en el futuro. El objeto AlarmManager no puede crear instancias directamente, pero puede recuperarse llamando a Context.getSystemService (Context.ALARM_SERVICE). AlarmManager siempre está registrado con intención. Cuando se activa una alarma, el bash que se ha registrado con AlarmManager es emitido por el sistema automáticamente. Esta intención inicia la aplicación de destino si no se está ejecutando. Se recomienda utilizar AlarmManager cuando desee que el código de la aplicación se ejecute en un momento específico, incluso si su aplicación no se está ejecutando actualmente. Para otros controles de operación de temporización se debe utilizar porque es fácil de usar. Handler está cubierto en otro tutorial.

Método Descripción set () Progtwig una alarma por una vez. setInexactRepeating () Progtwig una alarma con repetición inexacta. El tiempo de activación no sigue ninguna restricción estricta. setRepeating () Progtwig una alarma con tiempo de repetición exacto. setTime () Establece el tiempo del reloj de pared del sistema. setTimeZone () Establece la zona horaria predeterminada del sistema. Consulte la documentación de AlarmManager para obtener más información.

En este tutorial aprendamos a crear el temporizador de una sola vez y el temporizador de repetición, y también para cancelar el temporizador de repetición. Aquí el temporizador y la alarma se han usado indistintamente, pero en este contexto tutorial ambos tienen el mismo significado.

Código de ejemplo:

Vamos a crear tres botones para comenzar a repetir el temporizador, cancelar el temporizador de repetición y el temporizador de una sola vez en el archivo de diseño. Estos botones están conectados con métodos, es decir, startRepeatingTimer, cancelRepeatingTimer y onetimeTimer respecitivamente. Estos métodos se definirán en la clase de Actividad. El archivo de diseño se muestra a continuación (activity_alarm_manager.xml).

      

Vamos a definir BroadcastReciever que maneja la intención registrada con AlarmManager. En la clase dada se ha definido el método onReceive (). Este método se invoca tan pronto como se recibe la intención. Una vez que recibimos el bash, tratamos de obtener el parámetro adicional asociado con este bash. Este parámetro extra es definido por el usuario, es decir ONE_TIME, básicamente indica si este bash se asoció con el temporizador de una sola vez o el repetido. Una vez que se ha extraído el valor del parámetro ONE_TIME, se muestra el mensaje Toast en consecuencia. También se han definido métodos de ayuda, que se pueden usar desde otros lugares con la ayuda de objetos, es decir, los métodos setAlarm (), cancelAlarm () y onetimeTimer (). Estos métodos también se pueden definir en otro lugar para realizar operaciones en el temporizador, es decir, establecer, cancelar, etc. Para mantener este tutorial simple, lo hemos definido en BroadcastReceiver.

setAlarm (): este método establece la alarma que se repite mediante el uso del método setRepeating (). El método setRepeating () necesita cuatro argumentos:

tipo de alarma, tiempo de disparo: establézcalo en el intervalo de tiempo actual en milisegundos: en este ejemplo estamos pasando 5 segundos (1000 * 5 milisegundos) pendiente de bash: se registrará con esta alarma. Cuando se activa la alarma, se emitirá pendienteInternet. cancelAlarm (): este método cancela la alarma previamente registrada llamando al método cancel (). El método cancel () toma pendingIntent como argumento. El pendienteInternet debe coincidir con uno, solo entonces el método cancel () puede eliminar la alarma del sistema.

onetimeTimer (): este método crea una alarma de una sola vez. Esto se puede lograr llamando al método set (). El método set () toma tres argumentos:

tipo de tiempo de disparo de alarma pendiente de bash

 package com.rakesh.alarmmanagerexample; import java.text.Format; import java.text.SimpleDateFormat; import java.util.Date; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.PowerManager; import android.widget.Toast; public class AlarmManagerBroadcastReceiver extends BroadcastReceiver { final public static String ONE_TIME = 'onetime'; @Override public void onReceive(Context context, Intent intent) { PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, 'YOUR TAG'); //Acquire the lock wl.acquire(); //You can do the processing here. Bundle extras = intent.getExtras(); StringBuilder msgStr = new StringBuilder(); if(extras != null && extras.getBoolean(ONE_TIME, Boolean.FALSE)){ //Make sure this intent has been sent by the one-time timer button. msgStr.append('One time Timer : '); } Format formatter = new SimpleDateFormat('hh:mm:ss a'); msgStr.append(formatter.format(new Date())); Toast.makeText(context, msgStr, Toast.LENGTH_LONG).show(); //Release the lock wl.release(); } 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); //After after 5 seconds am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 5 , pi); } 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); } } 

A continuación se encuentra el archivo de manifiesto. Aquí, se requiere permiso WAKE_LOCK porque se usa el locking de activación durante el procesamiento en el método onReceive () presente en la clase AlarmManagerBroadcastReceiver. AlarmManagerBroadcastReceiver ha sido registrado como receptor de difusión.

               

Ahora definamos la clase de actividad que define algunos métodos. Estos métodos manejarán los clics del botón. Aquí en esta clase creamos una instancia de AlarmManagerBroadcastReciever que nos ayudará a acceder a setAlarm (), cancelAlarm () y setOnetime (). El rest del código es fácil de entender.

 package com.rakesh.alarmmanagerexample; import com.rakesh.alarmmanagerexample.R; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Toast; import android.support.v4.app.NavUtils; public class AlarmManagerActivity extends Activity { private AlarmManagerBroadcastReceiver alarm; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_alarm_manager); alarm = new AlarmManagerBroadcastReceiver(); } @Override protected void onStart() { super.onStart(); } public void startRepeatingTimer(View view) { 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){ Context context = this.getApplicationContext(); if(alarm != null){ alarm.CancelAlarm(context); }else{ Toast.makeText(context, 'Alarm is null', Toast.LENGTH_SHORT).show(); } } public void onetimeTimer(View view){ Context context = this.getApplicationContext(); if(alarm != null){ alarm.setOnetimeTimer(context); }else{ Toast.makeText(context, 'Alarm is null', Toast.LENGTH_SHORT).show(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_widget_alarm_manager, menu); return true; } } 

Una vez que haya terminado con la encoding, simplemente ejecute el proyecto y encontrará el tipo similar de aplicación ejecutándose en su emulador.

Descargue https://github.com/rakeshcusat/Code4Reference/tree/master/AndroidProjects/AlarmManagerExamplecode , si necesita un código de referencia.

Referencia: Tutorial en Android AlarmManager de nuestro socio de JCG Rakesh Cusat en el blog Code4Reference.

http://code4reference.com/2012/07/tutorial-on-android-alarmmanager/

    Intereting Posts