2012-05-21 5 views
13

Ich muss die Aktivität AlarmReceiver nach 10 Sekunden (zum Beispiel) starten. Ich brauche es aktiviert zu sein, ohne die App zu starten. Aber ob die App läuft oder nicht AlarmReceiver nicht aufgerufen werden. Irgendwelche Vorschläge?AlarmManager funktioniert nicht

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

hast du versucht @Pratik D zu antworten? –

Antwort

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

Dies ist der letzte Code, den ich arbeiten geschafft zu bekommen. Sie müssen

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

knapp über dem </application> Tag in Manifest-Datei hinzuzufügen.

Dies wird ein Alarm ausgelöst, das Verfahren nach dem Aufruf SetAlarm()

+0

@Alex @ dinesh707 Wo 'SetAlarm()' aufgerufen wird? – Neo

+8

Korrektur: Der Empfängerteil muss innerhalb des Application-Tags sein! –

+1

@JamesCameron Du hast meinen Nachtkumpel gerettet. – learner

6

Ab sofort ist es nicht möglich ist, Alarm zu starten, ohne die App ausgeführt wird, müssen Sie einmal Ihre jeweilige Anwendung ausführen Ihre Alarmanlage aktivieren .. Dazu .... !!

in Ihrem 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 Ihrem 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

Auch in 30 Sekunden ausgelöst werden, zusätzlich zu den oben genannten, ich denke, in der oncreate Methode des Launchers Aktivität sind die Methoden in der AlarmActivity sollten .. In diesem Fall sollte die Alarmaktivität die LAUNCHER-Aktivität der App sein. dies löste mein Problem

3

Und wenn es immer noch nicht funktioniert loswerden Teil kann helfen. Arbeitete für mich :)