Iniciar la aplicación en un momento específico

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

Usted puede hacerlo con AlarmManager, heres un ejemplo corto. Primero debe 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 emisiones a intervalos específicos o en un momento dado, repitiendo o no. Esta es la forma de escribir servicios de fondo amigable con la memoria en android. AlarmManager es una especie de cron en unix. Permite que su servicio de fondo comience, haga su trabajo y salga de la memoria.

Es probable que no desee iniciar una actividad (si eso es lo que quería decir con "aplicación"). Si desea alertar al usuario de que algo ha ocurrido, agregue una alarma que inicie un receptor en un momento dado y que el receptor añada una notificación. La notificación puede abrir la aplicación cuando se hace clic en él. 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:

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

Durante la escritura de una aplicación, surge la necesidad de programar la ejecución del código en el futuro. Puede requerir que AlarmManager programe su trabajo a una hora especificada. AlarmManager accede a la alarma del sistema y programa la ejecución del código incluso cuando la aplicación no se está ejecutando. Información del Proyecto: Meta-información sobre el proyecto. Versión de la plataforma: Nivel de la API de Android 10. IDE: Eclipse Helios Service Release 2 Emulador: Android 4.1

Prerrequisito: Conocimiento preliminar del marco de aplicación de Android, y receptor de Broadcast de intención.

AlarmManager:

AlarmManager tiene acceso a los servicios de alarma del sistema. Con la ayuda de AlarmManager puede programar la ejecución de código en el futuro. El objeto AlarmManager no puede instanciar directamente sin embargo se puede recuperar llamando Context.getSystemService (Context.ALARM_SERVICE). AlarmManager siempre se registra con intención. Cuando una alarma se apaga, el Intent que ha sido registrado con AlarmManager, es transmitido automáticamente por el sistema. Esta intención inicia la aplicación de destino si no se está ejecutando. Se recomienda utilizar AlarmManager cuando desee que su código de aplicación se ejecute en un momento específico, incluso si su aplicación no se está ejecutando actualmente. Para otra operación de temporización se debe utilizar el manejador porque es fácil de usar. Handler está cubierto en otro tutorial.

Método Descripción set () Programa una alarma por una vez. SetInexactRepeating () Programa una alarma con una repetición inexacta. El tiempo de disparo no sigue ninguna restricción estricta. SetRepeating () Programa una alarma con tiempo de repetición exacta. SetTime () Ajusta la hora del reloj de pared del sistema. SetTimeZone () Establece la zona horaria predeterminada del sistema. Echa un vistazo a la documentación de AlarmManager para más información.

En este tutorial vamos a aprender a crear 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 utilizado indistintamente, pero en este contexto tutorial ambos tienen el mismo significado.

Ejemplo de código:

Vamos a crear tres botones de inicio de repetición del temporizador, cancelar el temporizador de repetición y un temporizador en el archivo de diseño. Estos botones se adjuntan con métodos ie startRepeatingTimer, cancelRepeatingTimer y onetimeTimer respecitively. Estos métodos se definirán en la clase Activity. El archivo de diseño se muestra a continuación (activity_alarm_manager.xml).

 <linearlayout android:layout_height='match_parent' android:layout_width='match_parent' android:orientation='vertical' xmlns:android='http://schemas.android.com/apk/res/android' xmlns:tools='http://schemas.android.com/tools'> <button android:id='@+id/btStart' android:layout_height='wrap_content' android:layout_width='match_parent' android:onclick='startRepeatingTimer' android:padding='@dimen/padding_medium' android:text='@string/btStart' tools:context='.WidgetAlarmManagerActivity'/> <button android:id='@+id/btCancel' android:layout_height='wrap_content' android:layout_width='match_parent' android:onclick='cancelRepeatingTimer' android:padding='@dimen/padding_medium' android:text='@string/btCancel' tools:context='.WidgetAlarmManagerActivity'/> <button android:id='@+id/btOneTime' android:layout_height='wrap_content' android:layout_width='match_parent' android:onclick='onetimeTimer' android:padding='@dimen/padding_medium' android:text='@string/btOneTime' tools:context='.WidgetAlarmManagerActivity'/> </linearlayout> 

Vamos a definir el 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 la intención tratamos de obtener el parámetro adicional asociado con esta intención. Este parámetro adicional es definido por el usuario, es decir, ONE_TIME, básicamente indica si esta intención se asoció con un temporizador de una sola vez o la repetición. Una vez que se ha extraído el valor del parámetro ONE_TIME, el mensaje Toast se muestra en consecuencia. También se han definido métodos auxiliares que pueden utilizarse 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 algún otro lugar para hacer la operación 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 repetitiva mediante el uso del método setRepeating (). El método setRepeating () necesita cuatro argumentos:

Tipo de alarma, tiempo de activación: ajustarlo al intervalo de tiempo actual en milisegundos: en este ejemplo pasamos 5 segundos (1000 * 5 milisegundos) pendiente de intención: Se registrará con esta alarma. Cuando se dispara la alarma, se emitirá el objeto pendiente. CancelAlarm (): Este método cancela la alarma previamente registrada llamando al método cancel (). El método cancel () toma pendingIntent como argumento. El objeto pendingIntent debería coincidir con uno, sólo entonces el método cancel () puede eliminar la alarma del sistema.

OnetimeTimer (): Este método crea una alarma de una sola vez. Esto puede lograrse llamando al método set (). El método set () toma tres argumentos:

Tipo de alarma tiempo de disparo pendiente de intención

 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 muestra el archivo de manifiesto. Aquí, el permiso WAKE_LOCK es necesario porque el bloqueo de la sesión está siendo utilizado mientras se procesa en el método onReceive () presente en la clase AlarmManagerBroadcastReceiver. AlarmManagerBroadcastReceiver se ha registrado como receptor de difusión.

 <manifest android:versioncode='1' android:versionname='1.0' package='com.rakesh.alarmmanagerexample' xmlns:android='http://schemas.android.com/apk/res/android'> <uses-sdk android:minsdkversion='10' android:targetsdkversion='15'/> <uses-permission android:name='android.permission.WAKE_LOCK'/> <application android:icon='@drawable/ic_launcher' android:label='@string/app_name' android:theme='@style/AppTheme'> <activity android:label='@string/title_activity_alarm_manager' android:name='com.rakesh.alarmmanagerexample.AlarmManagerActivity'> <intent-filter> <action android:name='android.intent.action.MAIN'/> <category android:name='android.intent.category.LAUNCHER' /> </intent-filter> </activity> <receiver android:name='com.rakesh.alarmmanagerexample.AlarmManagerBroadcastReceiver'> </receiver> </application> </manifest> 

Ahora vamos a definir la clase de actividad que define algunos métodos. Estos métodos van a manejar los clics de botón. Aquí en esta clase creamos una instancia de AlarmManagerBroadcastReciever que nos ayudará a tener acceso a setAlarm (), cancelAlarm () y setOnetime (). Resto 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 codificación, sólo ejecute el proyecto y encontrará el tipo similar de aplicación que se ejecuta en su emulador.

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

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

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

Muchos programas de despertador (como Alarm Clock Plus) incluyen la posibilidad de iniciar un programa en un momento determinado, si desea que otro programa haga el trabajo pesado para usted.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.