In this article, we will create an Android application which provides a user interface to set an alarm. That user interface will contain datepicker and timepicker widgets. Once this alarm goes off, Android’s AlarmManager starts up an AlertDialog window which is intended to be executed by the alarm.
Suppose the device is in sleep mode while the alarm is going off, then the AlarmManager will switch on the screen and unlock the key pad before starting the intended dialog activity.
This application is developed in Eclipse Classic ( 4.2.0 ) with ADT plugin ( 20.0.3 ) and Android SDK (R20.0.3 ).
1. Create a new Android application project titled “ServiceAlarmDemo”
2. Design application launcher icon
3. Create a blank activity
4. Enter MainActivity details
5. Add Android’s backward compatibility support library
DialogFragment is available from API level 11 ( Honeycomb ) but can be used in pre Honeycomb versions using Android’s support library. Since this application will run in API level 4 and above, we need to add Android Support library to this project to use DialogFramgent in our application.
By default, Android support library (android-support-v4.jar ) is added to this project by Eclipse IDE to the directory libs. If it is not added, we can do it manually by doing the following steps :
- Open Project Explorer by Clicking “Window -> Show View -> Project Explorer”
- Right click this project
- Then from popup window, Click “Android Tools -> Add Support Library “
6. Update the file res/values/strings.xml
<resources> <string name="app_name">ServiceAlarmDemo</string> <string name="hello_world">Hello world!</string> <string name="menu_settings">Settings</string> <string name="title_activity_main">Alarm Setting Screen</string> <string name="title_activity_demo">Demo Activity Screen</string> <string name="str_btn_set_alarm">Set Alarm</string> <string name="str_btn_quit">Quit</string> <string name="str_tv_message">Opened by Alarm</string> </resources>
7. Update the layout file for the MainActivity in the file res/layout/activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <DatePicker android:id="@+id/dp_date" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TimePicker android:id="@+id/tp_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/dp_date" /> <RelativeLayout android:id="@+id/rlayout" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/tp_time" android:gravity="center_horizontal" > <Button android:id="@+id/btn_set_alarm" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/str_btn_set_alarm" /> <Button android:id="@+id/btn_quit_alarm" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/str_btn_quit" android:layout_toRightOf="@id/btn_set_alarm" /> </RelativeLayout> </RelativeLayout>
8. Create a DialogFragment class namely AlertDemo in the file src/in/wptrafficanalyzer/servicealarmdemo/AlertDemo.java
package in.wptrafficanalyzer.servicealarmdemo; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.view.WindowManager.LayoutParams; public class AlertDemo extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { /** Turn Screen On and Unlock the keypad when this alert dialog is displayed */ getActivity().getWindow().addFlags(LayoutParams.FLAG_TURN_SCREEN_ON | LayoutParams.FLAG_DISMISS_KEYGUARD); /** Creating a alert dialog builder */ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); /** Setting title for the alert dialog */ builder.setTitle("Alarm"); /** Setting the content for the alert dialog */ builder.setMessage("An Alarm by AlarmManager"); /** Defining an OK button event listener */ builder.setPositiveButton("OK", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { /** Exit application on click OK */ getActivity().finish(); } }); /** Creating the alert dialog window */ return builder.create(); } /** The application should be exit, if the user presses the back button */ @Override public void onDestroy() { super.onDestroy(); getActivity().finish(); } }
9. Create an activity called DemoActivity which is invoked by AlarmManager when an alarm is going off. The DemoActivity class is defined in the file src/in/wptrafficanalyzer/servicealarmdemo/DemoActivity.java
package in.wptrafficanalyzer.servicealarmdemo; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.view.WindowManager.LayoutParams; import android.widget.Toast; public class DemoActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /** Creating an Alert Dialog Window */ AlertDemo alert = new AlertDemo(); /** Opening the Alert Dialog Window. This will be opened when the alarm goes off */ alert.show(getSupportFragmentManager(), "AlertDemo"); } }
10. Update the MainActivity class in the file src/in/wptrafficanalyzer/servicealarmdemo/MainActivity.java
package in.wptrafficanalyzer.servicealarmdemo; import java.util.GregorianCalendar; import android.app.Activity; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.DatePicker; import android.widget.TimePicker; import android.widget.Toast; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); OnClickListener setClickListener = new OnClickListener() { @Override public void onClick(View v) { /** This intent invokes the activity DemoActivity, which in turn opens the AlertDialog window */ Intent i = new Intent("in.wptrafficanalyzer.servicealarmdemo.demoactivity"); /** Creating a Pending Intent */ PendingIntent operation = PendingIntent.getActivity(getBaseContext(), 0, i, Intent.FLAG_ACTIVITY_NEW_TASK); /** Getting a reference to the System Service ALARM_SERVICE */ AlarmManager alarmManager = (AlarmManager) getBaseContext().getSystemService(ALARM_SERVICE); /** Getting a reference to DatePicker object available in the MainActivity */ DatePicker dpDate = (DatePicker) findViewById(R.id.dp_date); /** Getting a reference to TimePicker object available in the MainActivity */ TimePicker tpTime = (TimePicker) findViewById(R.id.tp_time); int year = dpDate.getYear(); int month = dpDate.getMonth(); int day = dpDate.getDayOfMonth(); int hour = tpTime.getCurrentHour(); int minute = tpTime.getCurrentMinute(); /** Creating a calendar object corresponding to the date and time set by the user */ GregorianCalendar calendar = new GregorianCalendar(year,month,day, hour, minute); /** Converting the date and time in to milliseconds elapsed since epoch */ long alarm_time = calendar.getTimeInMillis(); /** Setting an alarm, which invokes the operation at alart_time */ alarmManager.set(AlarmManager.RTC_WAKEUP , alarm_time , operation); /** Alert is set successfully */ Toast.makeText(getBaseContext(), "Alarm is set successfully",Toast.LENGTH_SHORT).show(); } }; OnClickListener quitClickListener = new OnClickListener() { @Override public void onClick(View v) { finish(); } }; Button btnSetAlarm = ( Button ) findViewById(R.id.btn_set_alarm); btnSetAlarm.setOnClickListener(setClickListener); Button btnQuitAlarm = ( Button ) findViewById(R.id.btn_quit_alarm); btnQuitAlarm.setOnClickListener(quitClickListener); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }
11. Update the file AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="in.wptrafficanalyzer.servicealarmdemo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".DemoActivity" android:label="@string/title_activity_demo" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" > <intent-filter> <action android:name="in.wptrafficanalyzer.servicealarmdemo.demoactivity" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application> </manifest>
12. Screenshots of the application
13. Download the source code of this alarm application

14. Reference
http://developer.android.com/guide/index.html

I am George Mathew, working as software architect and Android app developer at wptrafficanalyzer.in
You can hire me on hourly basis or on project basis for Android applications development.
For hiring me, please mail your requirements to info@wptrafficanalyzer.in.
My other blogs
store4js.blogspot.com
A really helpfull website. Lots of daily use application examples as well as uncommon examples. Really helpfull.
WOW excelente
me funciono super, hice unas modificaciones como agregar sonido y vibración
realmente genial!!! gracias
Ups in english, really works
i add sound and vibration
and wow amazing work
i was fighting with keyguard and using wakelocks :S and i did use the flags in window manager but seem i was doing wrong
very helpfull 
how did you add sound and vibration function on this source?
can you let me know how it could be done? thanks, Jung
a very great source code, but does it work in eclipse emulator?
nice example loving it. very usefull. Thank You
Great work, thank you. Do you have any idea why waking up screean and unlocking keypad works on emulator, but doesn’t on phone? (sony ericsson live with walkman)
Its crashing on Samasung galaxy S3 after setting alarm….

How it link from one class to another class?
Hi there …
thanks for this contribution …
Currently I’m programming an alarm application to customize to my needs. After your example, I have been easier, but what I need now is to make the application work when the phone is off, not on standby, so that the alarm when you have to ring first turn on the phone and then ring.
Is this possible ??
Thanks and regards.
Good Morning:
very good explanations … just a question … if the phone is OFF (not in standby, but completely off), ¿I can turn it on from the application I programmed, and the alarm sounds, without any intervention by the user? (In the same way as the default one alarm on the phone).
Thanks … greetings
if i want to use notification instead of alert dialog, what should i do?
does this alarm work after device reboot??
thanks!
is it possible to set more than one alarm at the same time?
Hello, I have a problem when I did this, instead of showing the Alarm Dialog Box when its time, it only shows the error message saying unfortunately this app need to be stopped and it exits the app straight away. may I know why is the Alarm Dialog Box is not showing? THANKS!
Hi ….Nice tutorial.it’s working…..I am trying to set Alarm in Frame of navigationdrawer.. but Dialogfragment is not displayed…can i send my code to your mail_id?
Hi Ayon, it depends on Android version such that in version 5: its allowed toset more than one alarm at the same time but only one of them will shows up
In version 4.4 it’s also allowed and all the alarms will be played such that if you set a ringtone for the alarm with 3 simultaneously your ringtone will be played 3 time as well
Hello Daina, most likely your problem is in the creation/initialization of the dialog box.
For future reads I will answer my own question;
The alarms does not work after device reboot. So if you want to do so you should reset them on device reboot which is easy task to accomplish.
Hello Sir,nice tutorial..its working..now i want to set snooze and skip option ..can you give some idea or codes for that..? thank you