2012-05-21 16 views
13

Devo avviare l'attività AlarmReceiver dopo 10 secondi (ad esempio). Ho bisogno che venga attivato senza eseguire l'app. Ma se l'app funziona o no, il AlarmReceiver non viene chiamato. Eventuali suggerimenti?AlarmManager non funziona

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

hai provato @Pratik D risposta? –

risposta

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); 
    } 
} 

Questo è il codice finale sono riuscito a far funzionare. È necessario aggiungere

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

appena sopra il tag </application> nel file manifesto.

Ciò impostare un allarme per innescare in 30 secondi dopo la chiamata al metodo SetAlarm()

+0

@Alex @ dinesh707 Dove viene chiamato 'SetAlarm()'? Correzione – Neo

+8

: la parte del ricevitore deve trovarsi all'interno del tag dell'applicazione! –

+1

@JamesCameron Hai salvato il mio compagno di notte .. – learner

6

A partire da ora, non è possibile avviare Allarme senza correre l'app, è necessario eseguire una volta la vostra rispettiva applicazione per attivare l'allarme .. Per questo .... !!

In Your 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); 

In Your 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

Inoltre, in aggiunta a quanto sopra, penso che i metodi nella AlarmActivity dovrebbero essere nel metodo OnCreate dell'attività LAUNCHER .. In questo caso, Alarm Activvity dovrebbe essere l'attività di LAUNCHER dell'app. questo ha risolto il mio problema

3

E se non funziona ancora, è possibile eliminare la parte android:process=":remote". Ha funzionato per me :)

Problemi correlati