Set an Alarm from My application

18,026

As @stealthcopter said, the AlarmManager is used to raise an Alarm your application can catch and then do something. Here is a little example I threw together from other posts, tutorials, and work I've done.

Main.java

Intent i = new Intent(this, OnAlarmReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 0, i,
                                                     PendingIntent.FLAG_ONE_SHOT);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND) + 10);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pi);

OnAlarmReceiver.java

public class OnAlarmReceiver extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
    WakeIntentService.acquireStaticLock(context);
    Intent i = new Intent(context, AlarmService.class);
    context.startService(i);
}}

WakeIntentService.java

public abstract class WakeIntentService extends IntentService {

    abstract void doReminderWork(Intent intent);

    public static final String LOCK_NAME_STATIC = "com.android.voodootv.static";
    private static PowerManager.WakeLock lockStatic = null;

    public static void acquireStaticLock(Context context) {
        getLock(context).acquire();
    }

    synchronized private static PowerManager.WakeLock getLock(Context context) {
        if (lockStatic == null) {
            PowerManager powManager = (PowerManager) context
                    .getSystemService(Context.POWER_SERVICE);
            lockStatic = powManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
                    LOCK_NAME_STATIC);
            lockStatic.setReferenceCounted(true);
        }
        return (lockStatic);
    }

    public WakeIntentService(String name) {
        super(name);
    }

    @Override
    final protected void onHandleIntent(Intent intent) {
        try {
            doReminderWork(intent);
        } finally {
            getLock(this).release();
        }
    }}

AlarmService.java

public class AlarmService extends WakeIntentService {

    public AlarmService() {
        super("AlarmService");
    }

    @Override
    void doReminderWork(Intent intent) {
        NotificationManager manager = (NotificationManager)
                getSystemService(NOTIFICATION_SERVICE);
        Intent notificationIntent = new Intent(this, Main.class);
        PendingIntent pi = PendingIntent.getActivity(this, 0,
                notificationIntent, PendingIntent.FLAG_ONE_SHOT);
        Notification note = new Notification(R.drawable.icon, "Alarm",
                System.currentTimeMillis());
        note.setLatestEventInfo(this, "Title", "Text", pi);
        note.defaults |= Notification.DEFAULT_ALL;
        note.flags |= Notification.FLAG_AUTO_CANCEL;
        int id = 123456789;
        manager.notify(id, note);
    }
}

This example will create a notification on the status bar after 10 seconds.

Hope it helps.

Also First post here :)

Oh almost forgot,

AndroidManifest.xml

<receiver android:name="com.android.alarmmanagertest.OnAlarmReceiver" />
<service android:name="com.android.alarmmanagertest.AlarmService" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
Share:
18,026
Harsha M V
Author by

Harsha M V

I turn ideas into companies. Specifically, I like to solve big problems that can positively impact millions of people through software. I am currently focusing all of my time on my company, Skreem, where we are disrupting the ways marketers can leverage micro-influencers to tell the Brand’s stories to their audience. People do not buy goods and services. They buy relations, stories, and magic. Introducing technology with the power of human voice to maximize your brand communication. Follow me on Twitter: @harshamv You can contact me at -- harsha [at] skreem [dot] io

Updated on June 04, 2022

Comments

  • Harsha M V
    Harsha M V almost 2 years

    I want to create an alarm object from my application. I am writing a To-Do application which will have an option to set an Alarm on the phone.

    I wanna set the Date and Time and also the Label for the alarm.

    Calendar c = Calendar.getInstance();
    c.setTimeInMillis(System.currentTimeMillis());
            c.clear();
            c.set(Calendar.YEAR, mYear);
            c.set(Calendar.MONTH, mMonth);
            c.set(Calendar.DAY_OF_MONTH, mDay);
            c.set(Calendar.HOUR, mHour);
            c.set(Calendar.MINUTE, mMinute);
            Intent activate = new Intent(this, alaram.class);
            AlarmManager alarams ;
            PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, activate, 0);
            alarams = (AlarmManager) getSystemService(this.ALARM_SERVICE);
            alarams.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), alarmIntent);
    

    I tried using the above code to set the alarm but am not able to. I dont get any error either :(

  • Avram Score
    Avram Score almost 11 years
    Terrific first post. Thanks.