Introduction
In this article let's learn one better concept in windows phone which
communicates with WCF Service to retrieve some friendly message to user. Once
this application is fully developed and deployed it enables to take photo using
application with inbuilt camera. Later, can able to view the taken photo images.
Question Arises: What is Camera Capture Task?
In simple terms "It enables to take photos using this application with inbuilt
camera."
Let's get this started now!!
Step 1 : The Complete Code of IService1.cs looks like this:
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Runtime.Serialization;
using
System.ServiceModel;
using
System.ServiceModel.Web;
using
System.Text;
namespace
Camera_WCF
{
// NOTE: You
can use the "Rename" command on the "Refactor" menu to change the interface name
"IService1" in both code and config file together.
[ServiceContract]
public interface
IService1 { [OperationContract]
string Capture(); }
}
Step 2 : The Complete Code of Service1.svc.cs looks like this:
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Runtime.Serialization;
using
System.ServiceModel;
using
System.ServiceModel.Web;
using
System.Text;
namespace
Camera_WCF
{
// NOTE: You
can use the "Rename" command on the "Refactor" menu to change the class name
"Service1" in code, svc and config file together.
public
class Service1
: IService1
{
public string
Capture()
{
return "
Hurray !!! It's Message from WCF for Camera Task ";
}
}
}
Step 3 : The Complete Code of Web.Config looks like this:
<?xml
version="1.0"?>
<configuration>
<system.web>
<compilation
debug="true"
targetFramework="4.0"
/>
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<!--
To avoid disclosing metadata information, set the value below to false and
remove the metadata endpoint above before
deployment
-->
<serviceMetadata
httpGetEnabled="true"/>
<!--
To receive exception details in faults for debugging purposes, set the value
below to true. Set to false before deployment to avoid disclosing exception
information
-->
<serviceDebug
includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment
multipleSiteBindingsEnabled="true"
/>
</system.serviceModel>
<system.webServer>
<modules
runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
Step 4 : The Complete Code of MainPage.xaml looks like this:
<phone:PhoneApplicationPage
x:Class="Camera_Capture_Task.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignWidth="480"
d:DesignHeight="768"
FontFamily=
{StaticResource
PhoneFontFamilyNormal}"
FontSize="{StaticResource
PhoneFontSizeNormal}"
Foreground="{StaticResource
PhoneForegroundBrush}"
SupportedOrientations="Portrait"
Orientation="Portrait"
shell:SystemTray.IsVisible="True">
<!--LayoutRoot
is the root grid where all page content is placed-->
<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="Vijay's
Camera Capture Application"
Style="{StaticResource
PhoneTextNormalStyle}"/>
<TextBlock
x:Name="PageTitle"
Text="Windows
7 Phone"
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">
<Image
Height="234"
HorizontalAlignment="Left"
Margin="75,342,0,0"
Name="image1"
Stretch="Fill"
VerticalAlignment="Top"
Width="329"
/>
<Button
Content="Capture"
FontFamily="Verdana"
FontSize="22"
Height="72"
HorizontalAlignment="Left"
Margin="145,155,0,0"
Name="button1"
VerticalAlignment="Top"
Width="160"
Click="button1_Click"
/>
</Grid>
</Grid>
</phone:PhoneApplicationPage>
Step 5 : The Complete Code of MainPage.xaml.cs looks like this:
using
System;
using
System.Collections.Generic;
using
System.Linq;
using System.Net;
using
System.Windows;
using
System.Windows.Controls;
using
System.Windows.Documents;
using
System.Windows.Input;
using
System.Windows.Media;
using
System.Windows.Media.Animation;
using
System.Windows.Shapes;
using
Microsoft.Phone.Controls;
using
Microsoft.Phone.Tasks;
using
System.Windows.Media.Imaging;
using
Camera_Capture_Task.ServiceReference1;
namespace
Camera_Capture_Task
{
public partial
class MainPage
: PhoneApplicationPage
{
// Constructor
public
MainPage()
{
InitializeComponent();
}
static void
capture_Call(object sender,
CaptureCompletedEventArgs e)
{
MessageBox.Show(e.Result);
}
private void
button1_Click(object sender,
RoutedEventArgs e)
{
objClient.CaptureCompleted += new
EventHandler<CaptureCompletedEventArgs>(capture_Call);
objClient.CaptureAsync();
objCapture_Task.Completed += new
EventHandler<PhotoResult>(capture_Completed);
objCapture_Task.Show();
}
void capture_Completed(object
sender, PhotoResult e)
{
switch(e.TaskResult)
{
case TaskResult.OK:
BitmapImage objImage =
new BitmapImage();
objImage.SetSource(e.ChosenPhoto);
image1.Source = objImage;
break;
case TaskResult.Cancel:
MessageBox.Show("Capture
Cancelled");
break;
case TaskResult.None:
MessageBox.Show("Capture
Cannot be Operated");
break;
}
}
#region
Class Objects Service1Client objClient = new Service1Client();
CameraCaptureTask objCapture_Task = new
CameraCaptureTask(); #endregion
}
}
Step 6 : The Output of the Application looks like this:
I hope this article is useful for you. I look forward for your comments and
feedback.
Thanks Vijay Prativadi.