BroadcastReceiver not triggered by Alarm

Posted by Ezekiel Buchheit on Stack Overflow See other posts from Stack Overflow or by Ezekiel Buchheit
Published on 2012-06-10T16:23:43Z Indexed on 2012/06/10 16:40 UTC
Read the original article Hit count: 355

I am trying to set up an alarm that will run in the background and trigger (eventually) a save event. At the moment I simply have this code attached to a button. Press the button and the alarm should start leaving Toast messages behind as an indication that it is functioning. At the moment everything runs except the onReceive in the BroadcastReceiver is never triggered.

Here is my code:

The class setting up the alarm:

//FIXME - rename (ie BackgroundSave; more descriptive)
public class AlarmReceiver extends Service{

    //FIXME - make sure you kill the service
    public void onCreate() {
        super.onCreate();
        Toast.makeText(getApplication().getApplicationContext(), "Service onCreate called", Toast.LENGTH_SHORT).show();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Toast.makeText(getApplication().getApplicationContext(), "Service started", Toast.LENGTH_SHORT).show();
        setAlarm(AlarmReceiver.this);
        // We want this service to continue running until it is explicitly
        // stopped, so return sticky.
        return START_STICKY;
    }

    public void setAlarm(Context c) {
        AlarmManager alarmManager = (AlarmManager)c.getSystemService(Context.ALARM_SERVICE);
        Intent i = new Intent(c, Alarm.class);
        PendingIntent pi = PendingIntent.getBroadcast(c, 0, i, 0);
        alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, System.currentTimeMillis() + 1000, 1000, pi);
        Toast.makeText(c.getApplicationContext(), "setAlarm called", Toast.LENGTH_SHORT).show();
    }

    public void cancelAlarm(Context context) {
        Intent intent = new Intent(context, Alarm.class);
        PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        alarmManager.cancel(sender);
    }

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }
}

Here is the BroadcastReceiver:

public class Alarm extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Alarm", Toast.LENGTH_SHORT).show();
    }

}

And here is my manifest:

<!-- Alarm -->
        <service android:name="com.xxxx.android.tools.AlarmReceiver" android:enabled="true" />
        <receiver android:name="com.xxxx.android.tools.Alarm" ></receiver>

The alarm onReceive is never triggered.

© Stack Overflow or respective owner

Related posts about android

Related posts about broadcastreceiver