For your convenience Apress has placed some of the front matter material after the index. Please use the Bookmarks and Contents at a Glance links to access them. Contents at a Glance About the Authors ��������������������������������������������������������������������������������������������������������������xix About the Technical Reviewer �������������������������������������������������������������������������������������������xxi Acknowledgments �����������������������������������������������������������������������������������������������������������xxiii Introduction ����������������������������������������������������������������������������������������������������������������������xxv ■ Chapter 1: Introduction to the Windows Phone SDK ���������������������������������������������������������1 ■ Chapter 2: Multi-Resolution Support and Basic User Interface Components ������������������23 ■ Chapter 3: Gestures ���������������������������������������������������������������������������������������������������������55 ■ Chapter 4: Tiles and Lock Screen ������������������������������������������������������������������������������������79 ■ Chapter 5: Background Agents and Local Notifications ������������������������������������������������109 ■ Chapter 6: Appointments and Contacts �������������������������������������������������������������������������141 ■ Chapter 7: Camera, Photos, and Media �������������������������������������������������������������������������163 ■ Chapter 8: Maps, Location, and Routing ������������������������������������������������������������������������195 ■ Chapter 9: Communications and Speech �����������������������������������������������������������������������225 ■ Chapter 10: Launching and Resuming Apps ������������������������������������������������������������������253 ■ Chapter 11: Data Storage ����������������������������������������������������������������������������������������������277 ■ Chapter 12: Windows Azure Mobile Services ����������������������������������������������������������������299 ■ Chapter 13: Using the Microsoft Live SDK ���������������������������������������������������������������������343 ■ Chapter 14: Publishing Your App �����������������������������������������������������������������������������������365 Index ���������������������������������������������������������������������������������������������������������������������������������393 v Introduction The .NET Compact Framework 1.0 and GUID.NewGuid(). . . that’s where it all began . . . or rather didn’t, as I was discouraged from really getting started at that point. The problem was that the static NewGuid method returned an empty string. Many trade-offs were made in the PocketPC operating system and the initial version of the Compact Framework in order to strike a balance between performance, footprint, and time to market. Several of the Windows API functions upon which NewGuid relied were not included in PocketPC, and the Compact Framework didn’t implement an alternative, so you just ended up with not so much as a NotImplementedException for your troubles. Just an empty string. The prescribed workaround took you on a journey into the depths of the Crypto-API, COM Interop, and P/Invoke. I just didn’t want to know that much about it. This is probably why at the time I had never met a single happy mobile developer. The next problem faced by PocketPC developers was that there was no hardware standardization. You couldn’t count on anything being the same from one device model to the next even within the same manufacturer. Some devices had hardware-based buttons for certain actions while others did not. Writing an application that would work on any device running the PocketPC operating system was an opportunity for personal growth, to put it somewhat euphemistically. Android developers right now will know exactly what I’m talking about. An even greater challenge awaits them in that not only do they face hardware differences but they also have to cope with the fragmentation of the Android operating system. No thank you. My dear friend and coauthor, Lori Lalonde, relates a similar experience when developing for BlackBerry. The sheer amount of ceremonial code that needed to be written to accomplish certain seemingly simple tasks was discouraging. With the introduction of Windows Phone 7 there dawned a new age. Manufacturers that wanted to produce Windows Phone devices were required to support a rigid design specification. Certain hardware elements were required to be present, and certain device interactions were tied to the hardware. The Back button, Windows button, and Search button were the main examples. The Windows Phone OS as well could now provide a consistent API for interaction with the device. Many of the functions that you used to have to code yourself are now provided as native services or exposed via Launchers and Choosers. You’ll see examples of Launchers and Choosers in Chapter 6 on appointments and contacts as well as Chapter 8 on maps and navigation. Chapter 7 on the camera, photos, and media introduces you to the Background Audio Service that you can use. There’s no need for DirectX knowledge here. This is one of the main design goals of Windows Phone. Providing these services through a common operating system–provided API enables developers to focus on providing greater value in their applications rather than having to reinvent the wheel. This also helps protect the user of the device. For example, as shown in Chapter 6, there is no way to flood the contact store with contacts or to even add a single contact without the user’s consent. Also, because you must interact with the built-in contact management UI, there is no way to subvert the process Who This Book Is For Windows Phone 8 Recipes is for the developer who has a .NET background, with familiarity in either WPF, Silverlight, or C#, and is ready to tap into a new and exciting market in mobile app development. The Windows Phone 8 SDK provides a platform that makes it easy for developers to create and publish quality Windows Phone apps in record time. The book provides the necessary information for developers to get their development environment up and running, build engaging apps that leverage the capabilities and features available in the Windows Phone 8 SDK, and walk through the steps needed to publish those apps to the Windows Phone Store. xxv ■ IntroduCtIon How This Book Is Structured This book is structured so that it does not have to be read from cover to cover. Each chapter is focused on a specific area of functionality and attempts to cover common problems you may encounter. As much as possible, each recipe has been written as a stand-alone solution to a single problem statement. Some chapters, such as Chapter 12 on Windows Azure Mobile Services, for example, can be read in order from start to finish as the information in each recipe builds upon concepts introduced in the previous one. Having said that, each recipe can still stand on its own. Recipes that may build upon concepts that have been discussed in other recipes or even other chapters will contain references to these dependencies so that you can find them quickly. Conventions The style of text in the book follows the standard Apress format, so many of you will already be familiar with it. This introduction follows the same standard. For example, when code is presented inline with body text, it will LookLikeThis. This style is used to call out ClassNames, Types, variableNames, and just about any other text that would normally appear in your code. When code is presented in a block, it will be captioned, referred to in the body text by number, and have a consistent code style applied to it. See Listing 1 for an example. Listing 1. Device Resolution Enumeration public enum Resolution { WVGA, WXGA, HD720p } Text that appears in bold is generally reserved for something you need to type into the interface. Downloading the Code The code for the examples shown in this book is available on the Apress web site, www.apress.com. A link can be found on the book’s information page on the Source Code/Downloads tab. This tab is located underneath the “Related Titles” section of the page. The sources for this book may change over time to provide new implementations that incorporate the most up-to-date features in Windows Phone 8 or to correct errata that is identified postpublication. As we go to press, we are also working to refine some of the samples into full applications and deploy them to the Windows Phone Store. You can contact Lori or Dave via the book’s email address at [email protected] should you have trouble running any of the samples or if you want to inquire about the progress of the sample application publishing process. Contacting the Authors Should you have any questions or comments—or even spot a mistake you think we should know about—you can contact both Lori and Dave at [email protected]. xxvi Chapter 1 Introduction to the Windows Phone SDK Welcome to this new and exciting journey toward Windows Phone 8 development! In this chapter, we will cover the essential information you will need to hit the ground running in mobile application development for the Windows Phone OS 8.0 platform. If you have developed Windows Phone 7 applications, don’t skip over this chapter just yet! We also have a recipe for upgrading your Windows Phone 7.x apps to Windows Phone 8. For your first taste of Windows Phone 8 development, we will provide you with the following recipes: • 1-1. Install the Development Tools • 1-2. Create Your First Windows Phone 8 Application • 1-3. Launch an App in the Windows Phone Emulator • 1-4. Launch an App on a Windows Phone Device • 1-5. Upgrade a Windows Phone 7.x app to Windows Phone 8 • 1-6. Become Acquainted With the Capabilities and Requirements in the Windows Phone Application Manifest 1-1. Install the Development Tools Problem Recently, you’ve been hearing the latest buzz around the newly released Windows Phone 8 devices. You want to capitalize on this by developing mobile apps for this platform while the market is hot. The problem is you don’t have a lot of time to spare to figure it out on your own. You want to know what you need to do to get your development environment up and running today. Solution Install the Windows Phone SDK 8.0. 1 Chapter 1 ■ IntroduCtIon to the WIndoWs phone sdK How It Works Just as a great artist needs a specific set of tools to create her masterpiece, a skillful mobile application developer needs the right tools to create quality applications. To develop Windows Phone 8 applications, you will need to download and install the necessary development tools from the Microsoft site. To obtain access to Windows Phone SDK downloads, documentation, developer forums, and more, go to http://dev.windowsphone.com. This web site is one which you will use often as you progress on your development journey, so you may want to bookmark it now. On the main landing page, click the link “Get SDK,” which will take you to the download page. You will notice within the download page there are links to download previous and current versions of the Windows Phone SDK. Before attempting to download and install the SDK, you should verify that your system meets the minimum requirements. You can check this by clicking the link “Get additional details and languages,” or for a quick summary refer to Table 1-1. Table 1-1. Minimum Requirements for Windows Phone SDK 8.0 and Windows Phone Emulator Windows Phone SDK 8.0 Windows Phone Emulator Windows 8 or Windows 8 Pro operating system Windows 8 Pro edition or higher Windows 8 64-bit (x64) client versions Same as SDK 6.5 GB of available hard disk space Same as SDK 4 GB RAM Same as SDK 64-bit (x64) CPU Same as SDK -- Requires processor that supports Second Level Address Translation (SLAT) As you can see in Table 1-1, the Windows Phone Emulator that is included in the SDK setup has slightly different requirements than the SDK. Most notably, Windows 8 Pro or higher must be installed on your system, as Hyper-V is required to run the Emulator. Additionally, your system must support Second Level Address Translation. If you are not sure whether your system supports Hyper-V or Second Level Address Translation, download and run the Coreinfo command-line utility from http://technet.microsoft.com/en-us/sysinternals/cc835722 (Figure 1-1). If Hypervisor and EPT both depict an asterisk (*), then your system will be able to run the Windows Phone Emulator. Figure 1-1. Coreinfo command-line utility results 2 Chapter 1 ■ IntroduCtIon to the WIndoWs phone sdK If the minimum requirements for the SDK are met, but the minimum requirements are not met for the Emulator, the SDK setup will still run and install the assemblies required for Windows Phone development; however, the Windows Phone Emulator will not be installed, and you will not be able to test your apps in the Emulator. In this case, you will need to test your app on a device, which we will discuss in Recipe 1-4. To install the latest SDK, you will need to perform the following steps: 1. Click the “Download” button for the SDK 8.0. You will be prompted to save or run the installation, WPexpress_full.exe 2. Launch the setup once it has finished downloading. 3. The installation will check to ensure your system meets the minimum requirements for Windows Phone SDK 8.0. If it does not meet the minimum requirements, an error will display and you will not be able to proceed with the installation. 4. Once the installation completes successfully, you may be required to restart your machine. Along with the required assemblies, and the Windows Phone emulator, the setup will install Visual Studio Express 2012 for Windows Phone on your system unless you have Visual Studio 2012 installed prior to running the SDK setup. 5. If you already have Visual Studio 2012 installed (i.e., Professional, Premium or Ultimate edition), then an add-in for your Visual Studio IDE will be installed to enable Windows Phone development. It doesn’t matter which version of Visual Studio 2012 that you use, you will still have the same templates available for building Windows Phone applications. ■ Note Windows phone sdK 8.0 contains the necessary tools to develop apps for both Windows phone 7.5 and Windows phone 8 platforms. however, for the remainder of this book, we will focus on Windows phone 8 application development. 1-2. Create Your First Windows Phone 8 Application Problem Now that you have the right development tools at hand, you want to develop your first app but you are not sure where to begin. Solution Use Visual Studio 2012 to create a new Windows Phone project. How It Works Launch Visual Studio 2012. Select File ➤ New Project . . . You will notice that a dialog displays with a list of built-in templates. 3 Chapter 1 ■ IntroduCtIon to the WIndoWs phone sdK At first, the choice can be overwhelming or confusing. For now, we will keep it simple and select the “Windows Phone App” template under Templates ➤ Visual C#. Be sure to highlight this template as shown in Figure 1-2. The next step is to name this new application. Let’s call it “MyFirstWPApp”. Figure 1-2. New Project dialog with Windows Phone templates displayed Now, you have the choice to select the directory where you will store this project. The default directory provided in the Location field points to your user profile’s documents location, under a Visual Studio 2012 Projects subdirectory. I prefer to specify my own location that I reserve for Windows Phone projects, but the choice is up to you. Also, notice the checkbox labeled “Create directory for solution”. Leaving this box checked will ensure that a subdirectory with the name of your project is created, and all project files will be saved within this subdirectory. If you uncheck this option, then your project files will be stored within the directory specified in the Location field. Again, the choice is up to you, but if you plan on creating multiple projects within the same directory, you want to ensure they are stored within subdirectories to avoid confusion and the possibility of files overwriting each other. 4 Chapter 1 ■ IntroduCtIon to the WIndoWs phone sdK Once you have the name and directory specified, click the OK button. A second dialog will display that will allow you to specify which Windows Phone OS version you want target (Figure 1-3). Click the dropdown arrow to view the different versions available. Figure 1-3. Select the Windows Phone Platform that your application will target If you select Windows Phone OS 7.1, it means that this is the minimum OS version on which the application will run. You can create a Windows Phone OS 7.1 application and it will run on Windows Phone 7.x and Windows Phone 8 devices. The focus of this book is intended to discuss Windows Phone 8 development, so we will create applications that target Windows Phone OS 8.0. Since this is the default selection, all you need to do in this dialog is click the OK button. A progress bar will appear on screen, and it will take a few seconds or so for the development environment to create the default files and layout for your Windows Phone application. Once the Visual Studio development environment loads, you will see a visual representation of the default phone page in the left pane. This is a good way to see what the page will look like on the device as you are designing your page. A sample of the Visual Studio IDE view on the initial load of a Windows Phone project is depicted in Figure 1-4. 5