Category Archives: WPdev

New API in Windows Phone 8.1 Update 1

Accessory-App-Windows-Phone-348x620As a part of the “Preview for Developers” program Microsoft just recently released the first larger update for Windows Phone 8.1 called just “Windows Phone 8.1 Update” with OS version number 8.10.14147.180. The original Windows Phone 8.1 was 8.10.12359.845.

According to MSDN blog article this update brings primarily these new end user features:

  • Cortana is now available for couple of new countries
  • Live Folders – native implementation of app folders on the Start screen
  • Option to simply select multiple SMS messages for deleting/forwarding
  • Apps Corner, Private VPN, Store Live Tile, Internet sharing via Bluetooth, customizable snooze time for Alarms and more.

But probably the most interesting feature, that might be part of this update as well, is is the support for notification on accessories, typically on smart watches and other wearables. The best hint for this functionality is already in the phone settings – the new “accessory apps” section.

The second hint is the new available API, that’ll be shown in the rest of this article.

Continue reading

File IO Best Practices in Windows and Phone apps – Part 1. Available APIs and File.Exists checking

Working with files is one of the most common tasks when developing any Windows Phone or Windows apps. In this mini-series of articles I’ll show you available APIs in all Windows Phone and Windows versions, caveats when doing task such as checking if specific file exists, getting target file, reading writing data from/to files and also how to effectively extract data from ZIP files, and more.

In the first part of this series I’ll discuss available File IO APIs in Windows Phone 8, 8.1 Silverlight, 8.1 XAML, Windows 8 and 8.1 platforms and benchmark all available methods for testing, if target file in Local Folder exists, or not. To my great surprise, the performance of methods in StorageFolder API is dramatically different across different platforms and it’s not a good idea to use single approach everywhere.

Continue reading

WPdev know-how in my open sourced app Bugemos

Capture1

Just today I’ve published one of my first Windows Phone application Bugemos as Open Source on GitHub.

The app, that I created and published to Windows Phone Store back in late 2011, is just a simple RSS reader displaying latest comic strips from the web http://www.bugemos.com. The reason I’m publishing it as Open Source is that I think it might give a helpful insight to starting WP developers and to the community as well. Note the published source code is not the exact one, that was used in the currently published app. The app was updated from WP7.5 to WP8 and also instead of original AsyncCTP it now uses current Microsoft.Bcl.Async NuGet package.

So let’s see, how is the application designed and what it does.

Continue reading

New API in Windows Phone 8 GDR3

In this article I describe new developer APIs available in Windows Phone 8 GDR3/Update 3, at the time of writing this article the latest official version of Windows Phone OS.

First of all, GDR3 brings officially no new API, only minor changes in OS behavior, support for 1080p devices, devices with 2GB of RAM, couple of new Uri schemes and that’s basically it. But what you might have noticed last week, Pedro Lamas described in his article  Disabling screenshot functionality in a Windows Phone app one undocumented new property

  • PhoneApplicationPage.IsScreenCaptureEnabled

After reading that article I was wondering, if there are another new APIs available in the GDR3 update, that can be accessed by reflection, so I stared my analysis.

Continue reading

What to expect from Microsoft in 2014, Part 1. Windows Phone

In my first article of what to expect from Microsoft in 2014, I’ll gather my thoughts regarding the Windows Phone platform.
As we already know, there was no major update of WP platform in 2013. The last major update was WP8 in November 2012 and since then we have only seen minor updates called GDR1,2 and 3, or in Microsoft terms Update 1,2 and 3. These brought some small fixes and features asked by users + support for quad-core ad FullHD devices, but overall nothing breathtaking.

The year 2014 will be different. We can say almost for sure, that Microsoft will deliver the long awaited update with codename “Blue” and expected name Windows Phone 8.1. This update might be first mentioned on Mobile World Congress in February and maybe delivered as a beta version shortly after, or no later than after the BUILD 2014 conference in the early April 2014. Similarly to WP7.5 “Mango” that Microsoft delivered in 2011, WP8.1 should be available to all existing WP8 devices.

Beside WP8.1 we won’t see most likely anything new that year, maybe only some kind of GDR5 update filling the gaps and bugs in not yet fully polished WP8.1 RTM version.

What to expect in WP8.1 from user’s perspective?

This is my personal list of user features that we might expect in this update, sorted by my subjective probability.

Continue reading

Tip: hiding programatically the “volume bar” controls on Windows Phone 8

windows-phone-volume-bar

Just a simple tip, what I just discovered recently – you probably know that when you play any music file or tune FM radio station on Windows Phone 8, this volume bar controls appear, when you press Volume Up/Down buttons. But even when you stop the music playback, there is no simple way, how to remove this media playback bar.

But since there is already at least one app, that can remove this Volume bar, I was wondering, how to do it in C# as well.

After couple of minutes tinkering with the MediaPlayer class I’ve discovered the solution, and it’s pretty easy:

  • You need to add into your app empty file with .wma extension and set the build action as “Content”, for instance “empty.wma” into the app root folder.
  • To stop the media playback and remove the media player just create dummy Song object and try to play it like this:
Song s = Song.FromUri("empty", new Uri("empty.wma", UriKind.Relative));
MediaPlayer.Play(s);

And that’s all 🙂
Note I’ve tested this only on Windows Phone 8 device with GDR3 update, but I guess it will work on WP7.5 as well.

How to debug most common memory leaks on WP8

When developing Windows Phone application, which is more complex than just 3 screens and couple lines of text, you’ll probably face the well-known problems of memory leaks. Even when using modern platform as Windows Phone 8, without pointers, with Garbage Collector, IntelliSense and everything, it is still quite easy to experience memory leaks in your apps.

In this article I’ll go through 3 most common problems that are causing leaks when developing Windows Phone apps: Images, abandoned Pages and leaks in native controls. I’ll also shown you simple trick, how to find your leaks early in the development and not two weeks before project deadline 🙂

Continue reading

Shared localization for Windows Phone 8 and Windows 8 apps using Portable Class Libraries

When developing Windows Phone 8 or Windows 8 app for more wider audience, you need to think about the localization. Unfortunately the localization on each platform uses completely different approach:

On Windows Phone 8:

  • Standard resx files with strings for each language are used.
  • The default language, for instance “en”, has localization in file without any suffix, typically just AppResources.resx.
  • Other languages uses files with culture specific suffix, like AppResources.de.resx, AppResources.cs.resx, etc.
  • For supporting non-default languages it’s required to check the additional languages in WMAppManifest.xml file and in the project settings as well
  • Localization in XAML is done typically via databinding to viewmodel class, that has instance of AppResources class, typically:
  • <TextBlock Text=”{Binding Loc.AppTitle, Source={StaticResource Localization}}“/>
  • in AppResources.resx:   |   AppTitle   |   Hello world!   |
  • For accessing the localized string programatically you can use:
  • string text = AppResources.AppTitle;
  • Globalization and localization for Windows Phone

On Windows 8(.1)

  • Windows 8 uses for localization new file types ending with .resw, but actually they use completely equal structure as WP8 .resx files.
  • Each file must be placed in a separate folder, for instance English localization should be placed in Strings/en/Resources.resw, German localization in Strings/de/Resources.resw
  • There are no automatically generated Designer.cs files for these resw files, but you can create manually ResourceLoader class for returning localized strings.
  • In Windows 8 the localization of Controls in XAML is done differently. Rather than assigning directly values using databinding, you just name each localizable control with x:Uid property and then add entry for localizing such property directly into resw file:
  • <TextBlock x:Uid=”TextBlock1″ Text=”DesignTimeText”/>
  • in AppResources.resw:   |   TextBlock1.Text   |   Hello world!   |
  • For accessing the localized string programatically you can use:
  • ResourceLoader resourceLoader = new ResourceLoader();
    string text = resourceLoader.GetString(“TextBlock1.Text”);
  • Application resources and localization sample (Windows 8.1)

As you can see, the recommended localization uses completely different approach in Windows Phone 8 and Windows 8. Sharing resx files using links, or even copying them or renaming is just not feasible to maintain. Beside these obvious differences, there are even other caveats:

  • Accessing localized strings in Windows 8 projects programatically is really cumbersome and you can make simply error, because you have no direct compile time check, that “TextBlock1.Text” actually exists in the resw file.
  • You cannot share any localized XAML code between Windows Phone 8 and Windows 8, because of the different localization method

Let’s see, how to solve this mess once and for all

Continue reading

Pro WP8 AppBar management with AppBarUtils

When developing apps for Windows Phone 8, every developer needs to know how to create and manage the App Bar. The problem is you cannot use databindings and/or localization in App bar buttons and menu items, you also cannot bind the colors or enabled state or even use commands bound to the buttons.

Most apps I’ve seen uses tedious programmatic initialization in code, repetitive entering of same resource values, or even not localized App bar at all. But there is an easy solution – the AppBarUtils library.

With this library you can use databinding for all AppBar properties, use Commands, even use dynamic app bar content for currently selected pivot/panorama item or your own state like logged-in/logged-out user. Let’s see, how to do it.

Continue reading