2012-05-21 19 views
13

Necesito comenzar la actividad AlarmReceiver después de 10 segundos (por ejemplo). Necesito que se active sin ejecutar la aplicación. Pero si la aplicación se ejecuta o no, el AlarmReceiver no recibe una llamada. ¿Alguna sugerencia?AlarmManager no funciona

Intent intent = new Intent(this, AlarmReceiver.class); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 111, intent, 0); 
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 

//alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() 
              //+ (10 * 1000), pendingIntent); 
Toast.makeText(this, "Alarm set", Toast.LENGTH_LONG).show(); 
+0

¿Has probado @Pratik D answer? –

Respuesta

26
public class AlarmReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
      String message = "Hellooo, alrm worked ----"; 
      Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); 
      Intent intent2 = new Intent(context, TripNotification.class); 
      intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(intent2); 
    } 

    public void setAlarm(Context context){ 
     Log.d("Carbon","Alrm SET !!"); 

     // get a Calendar object with current time 
     Calendar cal = Calendar.getInstance(); 
     // add 30 seconds to the calendar object 
     cal.add(Calendar.SECOND, 30); 
     Intent intent = new Intent(context, AlarmReceiver.class); 
     PendingIntent sender = PendingIntent.getBroadcast(context, 192837, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

     // Get the AlarmManager service 
     AlarmManager am = (AlarmManager) context.getSystemService(context.ALARM_SERVICE); 
     am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender); 
    } 
} 

Este es el código final me las arreglé para conseguir trabajo. Es necesario añadir

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

justo por encima de la etiqueta </application> en el archivo de manifiesto.

Esto establecerá una alarma para disparar en 30 segundos después de llamar al método SetAlarm()

+0

@Alex @ dinesh707 ¿Dónde se llama a 'SetAlarm()'? – Neo

+8

Corrección: ¡La parte del receptor debe estar dentro de la etiqueta de aplicación! –

+1

@JamesCameron Salvaste a mi amigo de la noche ... – learner

6

A partir de ahora, no es posible iniciar la alarma sin ejecutar la aplicación, debe ejecutar una vez que su respectiva aplicación para activar la alarma .. Por esta .... !!

en su ALARM_ACTIVITY:

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 

Intent intent = new Intent(ALARM_ACTIVITY.this,ALARM_RECEIVER.class); 

PendingIntent pendingIntent = PendingIntent.getBroadcast(SetReminder.this, ID, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeInMillis() + 1000, pendingIntent); 

en su ALARM_RECEIVER:

NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

notification = new Notification(R.drawable.alarmicon, "charSequence", System.currentTimeMillis()); 

notification.setLatestEventInfo(context, "alarmTitle", "charSequence", pendingIntent); 

notification.flags |= Notification.FLAG_AUTO_CANCEL; 

notificationManager.notify(1, notification); 
-1

También, además de lo anterior, creo que los métodos en el AlarmActivity deben estar en el método OnCreate de la actividad LANZADOR .. En este caso, Alarm Activvity debería ser la actividad LAUNCHER de la aplicación. esto resolvió mi problema

3

Y si todavía no funciona, deshacerse de la pieza android:process=":remote" puede ayudar. Funcionó para mí :)

Cuestiones relacionadas