2012-10-02 25 views
5

Quiero agregar esta función en mi aplicación en la que el usuario puede configurar la hora de inicio de la aplicación y en ese momento la aplicación puede comenzar. ¿Cómo puedo usar el receptor de difusión para abrir mi aplicación en el momento específico del usuario? No estoy seguro de que esto sea posible en Android o no? si tiene alguna idea que compartir. Aquí es código de actividad principalCómo iniciar la aplicación en un momento determinado

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    lv1=(ListView)findViewById(R.id.listView); 
    final ImageView splashImage = (ImageView) findViewById(R.id.imageView1); 
    splashImage.setBackgroundResource(R.layout.splash); 
    AnimationDrawable splashAnimation = (AnimationDrawable) splashImage.getBackground(); 
    splashImage.onWindowFocusChanged(true); 
    splashAnimation.start();  
    AlarmManager am = (AlarmManager) getBaseContext().getSystemService(Context.ALARM_SERVICE); 
    Date futureDate = new Date(new Date().getTime() + 86400000); 
    Calendar cal = Calendar.getInstance(); 
    cal.add(Calendar.MINUTE, 1);// start app in 1 min again 
    futureDate.setHours(0); 
    futureDate.setMinutes(0); 
    futureDate.setSeconds(20); 
    Intent intent = new Intent(getBaseContext(), MyAppReciever.class); 
    PendingIntent sender = PendingIntent.getBroadcast(getBaseContext(), 0, intent, 
      PendingIntent.FLAG_UPDATE_CURRENT); 
    am.set(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis() , sender);}} 

y este es el código de clase reciver

class MyAppReciever extends BroadcastReceiver{ public void onReceive(Context context,Intent intent) { 
startActivity(new Intent(context, Main_Activity.class)); 
}private void startActivity(Intent intent) { 
// TODO Auto-generated method stub}} 

He añadido esta línea de manifestar

<receiver android:process=":remote" android:name="MyAppReciever"></receiver> 

ahora mi emisión gatillo pero me dio este error

10-02 17:56:27.735: E/AndroidRuntime(9020): java.lang.RuntimeException: Unable to instantiate receiver com.example.testgui.MyAppReciever: java.lang.IllegalAccessException: access to class not allowed 

Gracias

+0

Por favor, eche un vistazo a mi ejemplo ... –

+0

Try with Date futureDate = new Date (new Date(). GetTime()); en lugar de Date futureDate = new Date (new Date(). getTime() + 86400000); –

+0

Hice algunos cambios en el código..i en lugar de futureDate estoy usando el objeto de calendario para la emisión de activadores en 1 minuto ... así que después de 1 min obtuve forzar cierre de diálogo ..por causa de "IllegalAccessException: acceso a la clase no permitida" –

Respuesta

7

Como dijo @Paul D'Ambra, puedes hacerlo con AlarmManager.

Ejemplo:

primero que hay que programar 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); 

Siguiente Es necesario crear un receptor con un poco de código a ejecutar (ie- iniciar su aplicación):

public class MyAppReciever extends BroadcastReceiver { 

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

    startActivity(new Intent(context, MyApp.class)); 
    } 
} 
+2

in este código solo necesito tomar entradas del texto de edición e insertarlo en futureDate.setHours (i); futureDate.setMinutes (j); ¿Derecha? –

+0

Si usa textos de edición para establecer la fecha de activación, entonces sí, solo necesita configurar las horas, los minutos o los segundos. –

+0

en su ejemplo, ¿qué es un objeto "con"? como con.getSystemService() –

6

estoy a punto de salir de la oficina así que no hay duda de que alguien puede añadir una respuesta más detallada, pero es necesario utilizar AlarmManager

El Gestor de alarma se aplica a los casos en el que desea haga que su código de aplicación se ejecute en un momento específico, incluso si su aplicación es que no se está ejecutando actualmente.

Cuestiones relacionadas