WinRT Background Task Processes

I’ve been working on a Windows Phone 8.1 project which has several background tasks. One of these uses the device’s sensors – using a DeviceUseTrigger. This is different to how a regular periodic task works because the task implementation creates a deferral and keeps running handling the event generated by the sensor device until it is explicitly cancelled. The task is created normally with a class implementing IBackgroundTask and runs under the context of BackgroundTaskHost.exe. Because I wanted to share some data with the other tasks as a when they run I was interested if these other IBackgroundTask implementations were also hosted in the same process. If so this means that any static instances would be shared between them. Since I couldn’t find the answer I did some testing with some additional debugging and discovered that no, they each run in a separate process.

This lead me to explore how to share data between them. There are no built in IPC classes in the Windows Runtime like MessageQueues or similar so really the only options are the LocalSettings for individual setting values and files placed in the LocalFolder for any other data. The added complication here is that you have to handle the situation where both processes may try to read/write the file at the same time. Luckily you can use a named Mutex to enforce exclusive access to the file and have the other process wait on the Mutex.

Get battery level on Windows and iOS

In Windows Phone 8.1 a new API was added to both retrieve the current battery level as a percent of fully charged and also handle an event fired when the value changed. Sadly this API is not common across this and “big” Windows.

In a couple of projects I’ve needed to retrieve the battery level periodically so that the app can perform different actions depending on the device state. This encouraged me to “port” the API to Xamarin iOS which does provide the same capability but in a platform-specific way through UIDevice. When it came to Windows 8.1 there was an interesting problem. There is a native API you can call to query the battery level, however you can’t call it from within an app you submit to the public Windows store because the API is not on the Whitelist (http://msdn.microsoft.com/en-us/library/windows/apps/br205757.aspx). For my initial use this was okay because the app was to be privately distributed. Sadly I don’t have a solution for a Store app. You may have seen various Store apps for battery which get around the problem by asking you to install a desktop “service” which retrieves the value  and passes it to the store app. Why the API was not added to Windows 8.1 at the same time as Phone 8.1 is odd with the big push on “universal apps”, at the bare minimum the native API should have been whitelisted. It returns no identifiable information and is read-only. There are plenty of more malicious things that could be done via supported APIs…

Given the caveat mentioned above I decided to release my code in case it is of use to others. The iOS version is fully functional and can be use for public apps. An Android implementation will follow in due course…

https://www.nuget.org/packages/InTheHand.Devices.Power/

Binary incompatibility in Silverlight for Windows Embedded in May 2014 Update Onwards

Last Year Michel blogged about a binary incompatibility introduced in the May 2014 update of Compact 7 which broke existing Silverlight for Windows Embedded code including pre-compiled system apps.

https://guruce.com/blogpost/windows-embedded-compact-may-2014-update-35-breaks-binary-compatibility-of-silverlight

The XAML In The Hand library was also affected. It turns out that one of the breaking changes was the addition of the GetTemplateChild method to the IXRControl interface. Previously this was present in the Compact 2013 codebase but not Compact 7.By adding a method to an existing COM interface (breaking the rules of COM again) means that the vtable offsets of all the methods in interfaces which inherit from this one are all shifted by one. Our next update will incorporate a fix for this (as well as exposing the GetTemplateChild functionality to the managed API) and will support Compact 7 from the May 2014 update onwards. The current released version of Compact 7 is the November 2014 update.

Calendar Import Now Universal

In order to extend the app onto Windows devices I’ve re-written the Calendar Import app as a Universal app with separate UI and features for Windows 8.1 and Windows Phone 8.1. Both apps add the new feature of browsing for files to import from directly within the app itself. This is on top of the existing filetype support which means you can import an item directly from your Email attachments, Web Browser, NFC, Bluetooth etc

Switching to a Windows Phone 8.1 project also means there are other new features we can support in upcoming releases. Users with a Windows Phone 8.0 device will continue to receive the 1.8 version until their device is updated to 8.1.

WindowsStore_badge_en_English_Black_small_154x40

Microsoft Band Initial Thoughts

I received my Band today and have just started setting it up, loading in my Starbucks card and tweaking settings. One thing which is interesting is that the phone doesn’t use GATT Bluetooth LE to expose functionality unlike some other wearables. Instead it has three RfComm services named:-

  • Cargo Service
  • Cargo Service 2
  • Push Service

Cargo is a code-name for the Microsoft Band and appears in a few places…

Because the screen is flat it makes the band feel very wide and I have the large size so I can only imagine this is more pronounced in the smaller sizes. I think a portrait orientation for the watch screen would be quite useful…

I thought the Starbucks integration would be some clever NFC magic but it is simply a 2D barcode displayed on the screen. This could be replicated for any loyalty card or similar provided they have a scanner which can read from a screen (Imager rather than laser scanner).

The Cortana integration is very slick and is even able to wake your phone and activate Cortana bypassing the lock screen. Whoa that’s a security risk you may think – well if you try and navigate away from Cortana you’ll then get your lock screen.

I haven’t had a chance to test the UV capabilities but since I’m in Seattle and it’s a dark and rainy November evening I’m not too worried about over-exposure at the moment.

Nokia CR-201 Car Charger with Lumia 930 Review

I recently got a Lumia 930 and was looking for a simple car holder/charger for it. I saw the CR-201 (which is updated from the CR-200 and advertised as compatible with the 930) and thought it would be perfect because:-

1) It has wireless charging so just pop the phone in, no fiddling with USB cables

2) It looks nice

However it doesn’t really fit the 930 and so this leads to a couple of issues – The clamp mechanism grabs the camera button, the sticky cable ties don’t stick to any material other than the plastic film they ship with and the wireless charger doesn’t deliver a charge capable of supporting charging while using the holder. No doubt this latter issue is also due to the size/positioning just not being right. Sadly it’s only after you discover these issues yourself you then find other reviewers online have encountered the same problems. So it’s going back and I’m looking for an alternative.

Microsoft Windows Platform Development MVP

Follow

Get every new post delivered to your Inbox.

Join 672 other followers