Introduction
In this article we are going to how to use the
Alarms and Reminders notifications in Windows Phone 7 Application real
time. A notification is a message that pops up on the screen to the end users at
a specified time scheduled initially. We can make the pop up with some
customized message for user friendly requirements. Basically we can make 2 types
of notifications an Alarm and a Reminder.
An Alarm is used to play a music file as a
notification is launched as scheduled by the end users. A Reminder notification
is similar to the Alarm notification expect we can have some text information to
show the end user and also we can provide a navigation URI of a page to be
opened on clicking of the reminder UI. Also we can include some query strings
parameters to pass information that should be used with in the page or the
application to which the navigation is pointing to. Microsoft has a limitation
of using 50 Alarm or Reminder notifications to be used with in a single
application.
Alarm and Reminders uses Alarm Class
and Reminder Class respectively, we can see in this article on
how to use these classes to create the alarm and reminders that can be used in
real time. We will create a new Windows Phone 7 project and provide options to
add an alarm and reminder. Let us jump start to see the step by step process on
how to do these tasks one by one.
Steps
First let us create an Alarm application, Open
Visual Studio 2010 and create a new application as shown in the screen below.
Now let us add 2 pages, one for adding an alarm
content page and other is for adding a reminder content page. Once we added 2
pages in the main page let us add 2 buttons for the user to select to which we
can navigate and add the notifications as shown in the screen below.
We have added 2 pages AddAlarm.XAML and
AddReminder.XAML, on the button click event we need to navigate to these 2 pages
as shown in the code behind.
XAML code
<Grid
x:Name="LayoutRoot"
Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition
Height="Auto"/>
<RowDefinition
Height="*"/>
</Grid.RowDefinitions>
<!--TitlePanel
contains the name of the application and page title-->
<StackPanel
x:Name="TitlePanel"
Grid.Row="0"
Margin="12,17,0,28">
<TextBlock
x:Name="ApplicationTitle"
Text="F5DEBUG
WP7 TUTORIALS"
Style="{StaticResource
PhoneTextNormalStyle}"/>
<TextBlock
x:Name="PageTitle"
Text="F5DEBUG"
Margin="9,-7,0,0"
Style="{StaticResource
PhoneTextTitle1Style}"/>
</StackPanel>
<!--ContentPanel
- place additional content here-->
<Grid
x:Name="ContentPanel"
Grid.Row="1"
Margin="12,0,12,0">
<Button
Content="Alarm"
Height="161"
HorizontalAlignment="Left"
Margin="65,108,0,0"
Name="btnAlarm"
VerticalAlignment="Top"
Width="330"
Click="btnAlarm_Click"/>
<Button
Content="Reminder"
Height="161"
HorizontalAlignment="Left"
Margin="65,306,0,0"
Name="btnReminder"
VerticalAlignment="Top"
Width="330"
Click="btnReminder_Click"/>
</Grid>
</Grid>
C# code
private
void btnAlarm_Click(object
sender, RoutedEventArgs e)
{
NavigationService.Navigate(new Uri("/AddAlarm.xaml",
UriKind.Relative));
}
private
void btnReminder_Click(object
sender, RoutedEventArgs e)
{
NavigationService.Navigate(new Uri("/AddReminder.xaml",
UriKind.Relative));
}
ALARM Page
Now we need to add the content to the
AddAlarm.XAML page, here to add an alarm we need to make use of the Alarm class
which is inherited from the ScheduledNotification class. Now
add the controls to the AddAlarm.XAML Page as shown in the screen below.
XAML code
<Grid
x:Name="ContentPanel"
Grid.Row="1"
Margin="12,0,12,0">
<TextBlock
Height="30"
HorizontalAlignment="Left"
Margin="26,94,0,0"
Name="ttName"
Text="Name"
VerticalAlignment="Top"
/>
<TextBox
Height="72"
HorizontalAlignment="Left"
Margin="126,68,0,0"
Name="txtName"
Text=""
VerticalAlignment="Top"
Width="306"
/>
<TextBlock
Height="30"
HorizontalAlignment="Left"
Margin="26,172,0,0"
Name="ttContent"
Text="Content"
VerticalAlignment="Top"
/>
<TextBox
Height="132"
HorizontalAlignment="Left"
Margin="126,146,0,0"
Name="txtContent"
Text=""
VerticalAlignment="Top"
Width="306"
/>
<TextBlock
Height="30"
HorizontalAlignment="Left"
Margin="26,310,0,0"
Name="ttBegintime"
Text="Begin
Time"
VerticalAlignment="Top"
/>
<toolkit:DatePicker
Name="datePicker1"
Height="67"
Margin="126,286,145,254"
/>
<Button
Content="Add"
Height="72"
HorizontalAlignment="Left"
Margin="54,470,0,0"
Name="btnAdd"
VerticalAlignment="Top"
Width="160"
Click="btnAdd_Click"
/>
<Button
Content="Clear"
Height="72"
HorizontalAlignment="Left"
Margin="220,470,0,0"
Name="btnClear"
VerticalAlignment="Top"
Width="160"
Click="btnClear_Click"
/>
<toolkit:TimePicker
HorizontalAlignment="Left"
Margin="317,286,0,0"
Name="timePicker1"
VerticalAlignment="Top"
Width="115"
/>
<TextBlock
Height="30"
HorizontalAlignment="Left"
Margin="26,383,0,0"
Name="textBlock1"
Text="Expiration"
VerticalAlignment="Top"
/>
<toolkit:DatePicker
Height="67"
Margin="126,359,145,181"
Name="datePicker2"
/>
<toolkit:TimePicker
HorizontalAlignment="Left"
Margin="317,359,0,0"
Name="timePicker2"
VerticalAlignment="Top"
Width="115"
/>
</Grid>
C# code
private
void btnAdd_Click(object
sender, RoutedEventArgs e)
{
AddAlaram();
}
void
AddAlaram()
{
Alarm alarm =
new Alarm(txtName.Text.ToString());
alarm.Content =
txtContent.ToString();
DateTime date =
(DateTime)datePicker1.Value;
DateTime time =
(DateTime)timePicker1.Value;
DateTime beginTime
= date + time.TimeOfDay;
alarm.BeginTime =
beginTime;
DateTime date1 =
(DateTime)datePicker1.Value;
DateTime time1 =
(DateTime)timePicker1.Value;
DateTime exptime =
date1 + time1.TimeOfDay;
alarm.ExpirationTime = exptime;
alarm.RecurrenceType = RecurrenceInterval.Daily;
ScheduledActionService.Add(alarm);
}
In the above code we have some properties which
are to be considered before we write our requirement on top of it. The
properties are as follows
- Name – Unique Name for
the Alarm
- Title – This is default
name, and we cannot manually set this property
- Content – This property
is to set some content for the alarm.
- Begin Time – Beginning of
the alarm
- Expiration Time –
Expiration time of the alarm
- Recurrence Type –
Recurrence type of the alarm
- Sound – Sound file to
play for the alarm.
Now we run the application and we can see the
alarm configuration as shown in the screen below.
REMINDER Page
Now let us start with designing the Reminder
page, before that we will add a new page called ReminderApp. The use of this
page is on reminder trigger we will have option to navigate to a URI with
passing some parameter. We will pass values to the pages from the Reminder page,
we will see on how to do that with this page. Add contents from the tool box for
the Reminder page as shown in the screen below and the code.
XAML code
Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"><TextBlock
Height="30"
HorizontalAlignment="Left"
Margin="21,32,0,0"
Name="ttName"
Text="Name"
VerticalAlignment="Top"
/>
<TextBox
Height="72"
HorizontalAlignment="Left"
Margin="121,6,0,0"
Name="txtName"
Text=""
VerticalAlignment="Top"
Width="306"
/>
<TextBlock
Height="30"
HorizontalAlignment="Left"
Margin="21,178,0,0"
Name="ttContent"
Text="Content"
VerticalAlignment="Top"
/>
<TextBox
Height="132"
HorizontalAlignment="Left"
Margin="121,152,0,0"
Name="txtContent"
Text=""
VerticalAlignment="Top"
Width="306"
/>
<TextBlock
Height="30"
HorizontalAlignment="Left"
Margin="21,316,0,0"
Name="ttBegintime"
Text="Begin
Time"
VerticalAlignment="Top"
/>
<toolkit:DatePicker
Height="67"
Margin="121,292,150,248"
Name="datePicker1"
/>
<Button
Content="Add"
Height="72"
HorizontalAlignment="Left"
Margin="49,476,0,0"
Name="btnAdd"
VerticalAlignment="Top"
Width="160"
/>
<Button
Content="Clear"
Height="72"
HorizontalAlignment="Left"
Margin="215,476,0,0"
Name="btnClear"
VerticalAlignment="Top"
Width="160"
/>
<toolkit:TimePicker
HorizontalAlignment="Left"
Margin="312,292,0,0"
Name="timePicker1"
VerticalAlignment="Top"
Width="115"
/>
<TextBlock
Height="30"
HorizontalAlignment="Left"
Margin="21,389,0,0"
Name="textBlock1"
Text="Expiration"
VerticalAlignment="Top"
/>
<toolkit:DatePicker
Height="67"
Margin="121,365,150,175"
Name="datePicker2"
/>
<toolkit:TimePicker
HorizontalAlignment="Left"
Margin="312,365,0,0"
Name="timePicker2"
VerticalAlignment="Top"
Width="115"
/>
<TextBlock
Height="30"
HorizontalAlignment="Left"
Margin="21,100,0,0"
Name="ttTitle"
Text="Title"
VerticalAlignment="Top"
/>
<TextBox
Height="72"
HorizontalAlignment="Left"
Margin="121,74,0,0"
Name="txtTitle"
Text=""
VerticalAlignment="Top"
Width="306"
/>
</Grid>
C# code
private
void btnAdd_Click(object
sender, RoutedEventArgs e)
{
AddAlaram();
}
void
AddAlaram()
{
Alarm alarm =
new Alarm(txtName.Text.ToString());
alarm.Content =
txtContent.ToString();
DateTime date =
(DateTime)datePicker1.Value;
DateTime time =
(DateTime)timePicker1.Value;
DateTime beginTime
= date + time.TimeOfDay;
alarm.BeginTime =
beginTime;
DateTime date1 =
(DateTime)datePicker1.Value;
DateTime time1 =
(DateTime)timePicker1.Value;
DateTime exptime =
date1 + time1.TimeOfDay;
alarm.ExpirationTime = exptime;
alarm.RecurrenceType = RecurrenceInterval.Daily;
ScheduledActionService.Add(alarm);
}
In the above code we have some properties which
are to be considered before we write our requirement on top of the reminder
properties. Some of the main properties are as follows
- Name - Unique Name for
the Reminder
- Title - This is default
name, and we cannot manually set this property
- Content -This property
is to set some content for the reminder.
- Begin Time - Beginning of
the Reminder
- Expiration Time -Expiration time of the Reminder
- Recurrence Type - Recurrence type of the Reminder
- Navigation URI -On
clicking of the application will navigate the user to the new page.
In the above code, if we see we have added a
parameter to be passed with the navigation URI as query string. To get the query
string value we need to write the below code in the new page (ReminderAppPage.XAML)
as shown in the screen below.
C# code
protected
override
void
OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
string
paramValue = "";
NavigationContext.QueryString.TryGetValue("param",
out paramValue);
textBlock1.Text =
paramValue;
}
Now we run the application and we can see the
Reminder configuration as shown in the screen below.
Conclusion
So in this article we have seen how to make use
of the inbuilt Scheduled Notification mechanism to build applications which
notifies to the end users with some custom messages. Alarm and Reminders plays
some major role for notifications to the end users as per the requirements.