<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Dr IInspectable &amp; Mr Native</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/thunbrynt/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/thunbrynt/feed.xml</link>
    <description>Everything WinRT from a C++ developer&amp;#039;s perspective.</description>
    <lastBuildDate>Wed, 17 Apr 2019 03:25:35 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Windows Phone 8.1 for Developers–Bluetooth LE Battery Service</title>
      <link>https://docs.microsoft.com/archive/blogs/thunbrynt/windows-phone-8-1-for-developersbluetooth-le-battery-service</link>
      <pubDate>Tue, 10 Jun 2014 04:29:14 GMT</pubDate>
      <dc:creator><![CDATA[Brynte]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/thunbrynt/2014/06/10/windows-phone-8-1-for-developersbluetooth-le-battery-service/</guid>
      <description><![CDATA[This blog post is part of a series about how Windows Phone 8.1 affects developers. This blog...]]></description>
      <content:encoded><![CDATA[<p><em>This blog post is part of a </em><a href="https://blogs.msdn.com/b/thunbrynt/archive/2014/03/31/windows-phone-8-1-for-developers-overview.aspx"><i>series</i></a><em> about how Windows Phone 8.1 affects developers. This blog describes how to program agains the BLE battery service and is written by Jimmy Engström at Apeoholic and was originally posted <a href="https://apeoholic.se/post/2014/06/09/Universal-apps-and-Bluetooth-LE-Battery-Service">here</a>.</em></p>  <p>Some devices exposes a battery service that can supply us with the current (no pun intended) battery level.   <br />I started this blog series working with only Windows phone in mind, but then I realized if it is possible to achieve the same results with an universal app of course that’s the route I should take.</p>  <h3>Capabilities</h3>  <p>To be able to communicate with Bluetooth low energy (or Bluetooth Smart, as it’s also called) you need to add a capability to your app.   <br />This can’t be done from a GUI, you need to edit the package.appmanifest manually and add the following lines of code just above &lt;/Package&gt;.    <br />Don’t forget to do that in both your Windows 8 and Windows Phone projects.</p>  <div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:4205f830-1325-4e2c-abb9-b824f0e40b9c" class="wlWriterSmartContent" style="margin: 0px; padding: 0px; float: none; display: inline;">   <pre class="brush: xml;">  &lt;Capabilities&gt;
    &lt;m2:DeviceCapability Name=&quot;bluetooth.genericAttributeProfile&quot;&gt;
      &lt;m2:Device Id=&quot;any&quot;&gt;
        &lt;m2:Function Type=&quot;name:battery&quot;/&gt;
      &lt;/m2:Device&gt;
    &lt;/m2:DeviceCapability&gt;
  &lt;/Capabilities&gt;</pre>
</div>

<p>Now you are are all set to start coding =)</p>



<h3>Battery Level Service</h3>

<p>The battery service must implement read, and notify is optional.
  <br />What that means is that you can always assume that you will be able to read the battery level (if your device implements the battery service, but you have to check if it supports Notify&#160; (a good developer should always check <img class="wlEmoticon wlEmoticon-smilewithtongueout" style="style" alt="Ler med tungan ute" src="https://www.apeoholic.se/image.axd?picture=wlEmoticon-smilewithtongueout_4.png" /> ).</p>

<p><a href="https://www.apeoholic.se/image.axd?picture=image_26.png"><img title="image" style="border: 0px currentcolor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" border="0" alt="image" src="https://www.apeoholic.se/image.axd?picture=image_thumb_26.png" width="534" height="135" /></a></p>

<p>The value it returns is a byte with a value from 0 to 100 representing a percentage of the current charge (0 being fully discharged).</p>

<h3>The property</h3>

<p>This is just a standard property with a backing store.</p>

<div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:34ca603f-865b-4789-8256-405dece90f0f" class="wlWriterSmartContent" style="margin: 0px; padding: 0px; float: none; display: inline;">
  <pre class="brush: c#;"> private int _BatteryLevel;
        public int BatteryLevel
        {
            get
            {
                return _BatteryLevel;
            }
            set
            {
                _BatteryLevel = value;
                OnPropertyChanged();
            }
        }</pre>
</div>

<p>The interesting part is how we handle OnPropertyChanged to try to avoid “The application called an interface that was marshalled for a different thread”.
  <br />I found a very neat piece of code <a href="https://www.zagstudio.com/blog/1398#.U5TjdLuKBaR"><span style="text-decoration: underline;">here</span></a>.

  <br />

  <br />

  <br />My implementation looks like this:</p>

<div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:a9987372-a9ba-418a-b669-6c697f927735" class="wlWriterSmartContent" style="margin: 0px; padding: 0px; float: none; display: inline;">
  <pre class="brush: c#;">        public event PropertyChangedEventHandler PropertyChanged;

        private readonly CoreDispatcher _dispatcher;
        protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            if (_dispatcher == null || _dispatcher.HasThreadAccess)
            {
                var eventHandler = this.PropertyChanged;
                if (eventHandler != null)
                {
                    eventHandler(this,
                        new PropertyChangedEventArgs(propertyName));
                }
            }
            else
            {
                IAsyncAction doNotAwait =
                    _dispatcher.RunAsync(CoreDispatcherPriority.Normal,
                    () =&gt; OnPropertyChanged(propertyName));
            }
        }</pre>
</div>



<div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:8dcf45d2-4245-44b8-b223-bf12093863fc" class="wlWriterSmartContent" style="margin: 0px; padding: 0px; float: none; display: inline;">
  <pre class="brush: c#;"> public BatteryServicePage()
        {
            if (!DesignMode.DesignModeEnabled)
            {
                _dispatcher = CoreWindow.GetForCurrentThread().Dispatcher;
            }
          ........
        }</pre>
</div>

<h3>
  <br />Reading a value</h3>

<p>I have written a simple method that reads a value from the service and if it supports notification it will also start a subscription on those notifications.</p>

<div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:66d14b3f-6680-4322-a015-6b26c857e2a9" class="wlWriterSmartContent" style="margin: 0px; padding: 0px; float: none; display: inline;">
  <pre class="brush: c#;"> public async Task&lt;byte[]&gt; GetValue(Guid gattCharacteristicUuids)
        {
            try
            {
                var gattDeviceService = await GattDeviceService.FromIdAsync(Device.Id);
                if (gattDeviceService != null)
                {
                    var characteristics = gattDeviceService.GetCharacteristics(gattCharacteristicUuids).First();

                    //If the characteristic supports Notify then tell it to notify us.
                    try
                    {
                        if (characteristics.CharacteristicProperties.HasFlag(GattCharacteristicProperties.Notify))
                        {
                            characteristics.ValueChanged += characteristics_ValueChanged;
                            await characteristics.WriteClientCharacteristicConfigurationDescriptorAsync(GattClientCharacteristicConfigurationDescriptorValue.Notify);
                        }
                    }
                    catch { }

                    //Read
                    if (characteristics.CharacteristicProperties.HasFlag(GattCharacteristicProperties.Read))
                    {
                        var result = await characteristics.ReadValueAsync(BluetoothCacheMode.Uncached);

                        if (result.Status == GattCommunicationStatus.Success)
                        {
                            byte[] forceData = new byte[result.Value.Length];
                            DataReader.FromBuffer(result.Value).ReadBytes(forceData);
                            return forceData;
                        }
                        else
                        {
                            await new MessageDialog(result.Status.ToString()).ShowAsync();
                        }
                    }
                }
                else 
                {
                    await new MessageDialog(&quot;Access to the device has been denied =(&quot;).ShowAsync();
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
            return null;
        }</pre>
</div>



<p>You can simply call the method like this:</p>

<div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:8f58217a-f6d0-4414-a7eb-8ca40f917034" class="wlWriterSmartContent" style="margin: 0px; padding: 0px; float: none; display: inline;">
  <pre class="brush: text;">BatteryLevel = Convert.ToInt32((await GetValue(GattCharacteristicUuids.BatteryLevel))[0]);</pre>
</div>



<p>You also need a callback method that can handle the notifications.</p>

<div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:be838c71-2013-4adc-b1fb-1f48c16beafe" class="wlWriterSmartContent" style="margin: 0px; padding: 0px; float: none; display: inline;">
  <pre class="brush: c#;">  void characteristics_ValueChanged(GattCharacteristic sender, GattValueChangedEventArgs args)
        {
            byte[] data = new byte[args.CharacteristicValue.Length];
            Windows.Storage.Streams.DataReader.FromBuffer(args.CharacteristicValue).ReadBytes(data);

           //Update properties
            if (sender.Uuid == GattCharacteristicUuids.BatteryLevel)
            {
                BatteryLevel = Convert.ToInt32(data[0]);
            }
        }</pre>
</div>



<p>Now your app can retrieve battery level from a Bluetooth LE device. How awesome is that?</p>

<p><a href="https://www.apeoholic.se/FILES%2f2014%2f06%2fBatteryDemo.zip.axdx">BatteryDemo.zip (289.18 kb)</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Going cross-platform with Xamarin–Doing the Android port</title>
      <link>https://docs.microsoft.com/archive/blogs/thunbrynt/going-cross-platform-with-xamarindoing-the-android-port</link>
      <pubDate>Tue, 20 May 2014 00:08:42 GMT</pubDate>
      <dc:creator><![CDATA[Brynte]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/thunbrynt/2014/05/20/going-cross-platform-with-xamarindoing-the-android-port/</guid>
      <description><![CDATA[This blog post series is a documentation for a talk I give about cross-platform development with...]]></description>
      <content:encoded><![CDATA[<p><em>This blog post <a href="https://blogs.msdn.com/b/thunbrynt/archive/2014/05/19/going-cross-platform-with-xamarin-the-windows-phone-app.aspx">series</a> is a documentation for a talk I give about cross-platform development with Xamarin. This series was co-authored by Johan Lindfors at <a href="https://www.coderox.se/">Coderox</a>. This post details how to implement the Android version of this app.</em></p>  <h1>Introduction</h1>  <p>In this blog post we will do the Android version of this app. This includes creating the new project, adding MvvmCross, implementing device specific services and of course implement the user interface. This will be a rather long post, so let’s get started.</p>  <h1>Setting up the Project</h1>  <p>First, let’s create the new project. Right-click on the solution, choose, Add =&gt; New Project. Choose the Android tab and create an Android application named Runner.Droid like this:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/8204.image_2638CEFF.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/8204.image_5F00_2638CEFF.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/5582.image_thumb_3ECAFD00.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/5582.image_5F00_thumb_5F00_3ECAFD00.png" width="644" height="373" /></a></p>  <p>Add a reference to the Runner.Core portable class library. Right-click on the solution, choose Manage NuGet packages for solution, click Installed Packages and select MvvmCross.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/2313.image_29DC0B3E.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/2313.image_5F00_29DC0B3E.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/8176.image_thumb_7465D9C9.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/8176.image_5F00_thumb_5F00_7465D9C9.png" width="644" height="416" /></a></p>  <p>Click the checkbox for Runner.Droid and press OK.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/5861.image_01CE7D81.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/5861.image_5F00_01CE7D81.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/0447.image_thumb_182422C6.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/0447.image_5F00_thumb_5F00_182422C6.png" width="484" height="484" /></a></p>  <p>Now we’ve added references to our portable class library as well as to MvvmCross. Also remove MainActivity.cs, Views\FirstView.cs and Resources\layout\FirstView.axml + Main.axml since we are going to build our own user interface. As usual, we get a ToDo-MvvmCross folder with instructions, but we have already done those. </p>  <p>Go into properties for your Android project and make sure that you have at least API Level 12, since we use fragments in this app, like this:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/3872.image_1438B33A.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/3872.image_5F00_1438B33A.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/4745.image_thumb_52C09191.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/4745.image_5F00_thumb_5F00_52C09191.png" width="644" height="458" /></a></p>  <p>We are all setup, let’s start building our app!</p>  <h1>Implementing the services</h1>  <p>Let’s start with the bottom layer. First, create a folder named Service. We have two platform specific services that needs implementation, <em>IPeriodicService</em> and <em>IPositionService</em>. Implementing <em>IPeriodicService</em> is trivial, it uses <em>System.Threading.Timer</em>. Here is the code for PeriodicService.cs:</p>  <p><font face="Courier New">namespace Runner.Droid.Service      <br /> {       <br />&#160;&#160;&#160; public class PeriodicService : IPeriodicService       <br />&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; #region Private fields       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; private Timer _poller = null;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; #endregion</font></p> <font face="Courier New"></font>  <p><font face="Courier New">&#160;&#160;&#160;&#160;&#160;&#160;&#160; #region Public methods      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; public void Start()       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; _poller = new Timer(_poller_Tick, null, TimeSpan.Zero, TimeSpan.FromSeconds(1));       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</font></p> <font face="Courier New"></font>  <p><font face="Courier New">&#160;&#160;&#160;&#160;&#160;&#160;&#160; public void Stop()      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (_poller != null)       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; _poller.Dispose();       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; _poller = null;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</font></p> <font face="Courier New"></font>  <p><font face="Courier New">&#160;&#160;&#160;&#160;&#160;&#160;&#160; #endregion</font></p> <font face="Courier New"></font>  <p><font face="Courier New">&#160;&#160;&#160;&#160;&#160;&#160;&#160; #region Callbacks      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; void _poller_Tick(object sender)       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (Ticked != null)       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Ticked(this, new EventArgs());       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; #endregion</font></p> <font face="Courier New"></font>  <p><font face="Courier New">&#160;&#160;&#160;&#160;&#160;&#160;&#160; #region Events      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; public event TickedEventHandler Ticked;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; #endregion       <br />&#160;&#160;&#160; }       <br /> }</font></p>  <p>We also have to implement <em>IPositionService. </em>The stock Android emulator I use when presenting doesn’t have the ability to generate location triggers, so PositionService.cs is just a fake that has a predefined set of coordinates that it loops around. Here is the code for this:</p>  <p><font face="Courier New">namespace Runner.Droid.Service      <br /> {</font></p> <font face="Courier New"></font>  <p><font face="Courier New">&#160;&#160;&#160; public class PositionService : IPositionService      <br />&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; public class GpsData       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; public double Latitude { get; set; }       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; public double Longitude { get; set; }       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</font></p> <font face="Courier New"></font>  <p><font face="Courier New">&#160;&#160;&#160;&#160;&#160;&#160;&#160; List&lt;GpsData&gt; GpsDataPoints = new List&lt;GpsData&gt; {      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.2403462746883,Longitude=17.9230690210418},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.240486746198, Longitude=17.9230003559093},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.240697452377, Longitude=17.9233093490056},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.240820363714, Longitude=17.9236870072345},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.241039847142, Longitude=17.9240989980296},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.241180315795, Longitude=17.9244594899753},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.241355900797, Longitude=17.9248714807704},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.241522705712, Longitude=17.9252491389993},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.241663172376, Longitude=17.925609630945},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.241856313093, Longitude=17.9260559543064},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.242049452717, Longitude=17.9264507788183},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.242181138197, Longitude=17.9267941044809},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.242365497014, Longitude=17.9272575941254},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.242532296990, Longitude=17.9277039174868},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.242646422819, Longitude=17.9280987419988},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.242830779121, Longitude=17.9284592339445},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.242997576821, Longitude=17.9288540584564},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.243120479867, Longitude=17.9291458852697},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.243111701093, Longitude=17.9294205457997},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.242892231000, Longitude=17.9294720446491},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.242734211659, Longitude=17.9294720446491},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.242576191585, Longitude=17.9295235434985},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.242444507631, Longitude=17.9295750423479},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.242383054945, Longitude=17.9295750423479},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.242225033244, Longitude=17.9296437074804},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.242084568895, Longitude=17.9295750423479},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.241952883042, Longitude=17.9294720446491},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.241838754891, Longitude=17.9293690469503},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.241707068089, Longitude=17.9292317166853},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.241628055764, Longitude=17.929060053854},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.241478809761, Longitude=17.9289398898721},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.241364680024, Longitude=17.9288025596071},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.241312004632, Longitude=17.9287338944746},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.241268108409, Longitude=17.928390568812},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.241180315795, Longitude=17.9280644094325},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.241118860831, Longitude=17.9277039174868},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.241074964360, Longitude=17.9273262592579},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.240995950570, Longitude=17.9268971021797},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.240916936597, Longitude=17.9265194439509},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.240846701800, Longitude=17.9260902868726},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.240776466859, Longitude=17.9257641274932},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.240697452377, Longitude=17.9253693029812},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.240653555364, Longitude=17.9249744784692},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.240583320025, Longitude=17.9246139865235},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.240495525648, Longitude=17.9243393259934},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.240442848913, Longitude=17.9238758363489},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.240390172097, Longitude=17.923618342102},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.240319936215, Longitude=17.9232750164394},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new GpsData{Latitude=59.240355054174, Longitude=17.9230518547587},       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; };</font></p> <font face="Courier New"></font>  <p><font face="Courier New">&#160;&#160;&#160;&#160;&#160;&#160;&#160; private Timer timer;      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; private int counter = 0;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; public void Start()       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; timer = new Timer((state) =&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (PositionChanged != null)       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; PositionChanged(this, new PositionChangedArgs(DateTime.Now, GpsDataPoints[counter].Latitude, GpsDataPoints[counter++].Longitude, 0));       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</font></p> <font face="Courier New"></font>  <p><font face="Courier New">&#160;&#160;&#160;&#160;&#160;&#160;&#160; public void Stop()      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (timer != null)       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; timer.Dispose();       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; timer = null;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; counter = 0;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</font></p> <font face="Courier New"></font>  <p><font face="Courier New">&#160;&#160;&#160;&#160;&#160;&#160;&#160; public event PositionChangedEventHandler PositionChanged;</font></p> <font face="Courier New"></font>  <p><font face="Courier New">&#160;&#160;&#160;&#160;&#160;&#160;&#160; public event StatusChangedEventHandler StatusChanged;      <br />&#160;&#160;&#160; }       <br /> }</font></p>  <p>Finally, as for the Windows Phone app, we need to help the IoC container to resolve these interfaces. Also, let’s move the event handler for <em>PositionChanged</em> event from app.xaml.cs to Setup.cs (since Android has no similar concept. Setup.cs then should add these lines):</p>  <p><font face="Courier New">protected override void InitializeLastChance()      <br /> {       <br />&#160;&#160;&#160; base.InitializeLastChance();       <br />&#160;&#160;&#160; Mvx.LazyConstructAndRegisterSingleton&lt;IPositionService, PositionService&gt;();       <br />&#160;&#160;&#160; Mvx.LazyConstructAndRegisterSingleton&lt;IPeriodicService, PeriodicService&gt;();</font></p> <font face="Courier New"></font>  <p><font face="Courier New">&#160;&#160;&#160; var positionService = Mvx.Resolve&lt;IPositionService&gt;();      <br />&#160;&#160;&#160; if (positionService != null)       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; positionService.PositionChanged += _positionService_PositionChanged;       <br /> }</font></p> <font face="Courier New"></font>  <p><font face="Courier New">void _positionService_PositionChanged(object sender, PositionChangedArgs e)      <br /> {       <br />&#160;&#160;&#160; Mvx.Resolve&lt;IDataPointCollectionService&gt;().AddDataPoint(new DataPointPosition()       <br />&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; Latitude = e.Latitude,       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; Longitude = e.Longitude,       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; Altitude = e.Altitude,       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; Time = (e.Time.HasValue ? e.Time.Value : DateTime.Now)       <br />&#160;&#160;&#160; });       <br /> }</font></p>  <h1>Implementing the user interface</h1>  <p>The paradigms for user interfaces in Android is different but similar as in XAML. They both have the concept of XML to describe the user interface and code-behind in C# (when using Xamarin). In XAML we have pages, in Android we have activities. One difference is that in Android the design and the code behind is loosely coupled, where as in Windows Phone they are tightly coupled together. In Windows you can do user controls to create reusable components, in Android they are called fragments.</p>  <p>To build the user interface, we will replace the pivot in Windows Phone with a tab in Android. For brevity, I will not implement the map control in Android. So, we will add all the files necessary and highlight key concepts. After adding all the files, our Resources\Layout folder should look like this:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/8357.image_631A2446.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/8357.image_5F00_631A2446.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/5483.image_thumb_6FAA6213.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/5483.image_5F00_thumb_5F00_6FAA6213.png" width="644" height="458" /></a></p>  <p>and our Service and Views folders should look like this:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/1588.image_27125846.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/1588.image_5F00_27125846.png"><img title="image" style="margin: 0px; display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/3000.image_thumb_4C9E6658.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/3000.image_5F00_thumb_5F00_4C9E6658.png" width="644" height="458" /></a></p>  <p>If you look into these files they are pretty vanilla except for the use of binding, both for data and commands. Here’s the definition for the Start button:</p>  <p><font face="Courier New">&lt;Button      <br />&#160;&#160;&#160; android:textSize=&quot;22sp&quot;       <br />&#160;&#160;&#160; android:layout_width=&quot;0dp&quot;       <br />&#160;&#160;&#160; android:layout_height=&quot;wrap_content&quot;       <br />&#160;&#160;&#160; android:layout_weight=&quot;1&quot;       <br />&#160;&#160;&#160; android:id=&quot;@+id/btnStart&quot;       <br />&#160;&#160;&#160; local:MvxBind=&quot;Click StartExerciseCommand&quot;       <br />&#160;&#160;&#160; android:text=&quot;Start&quot; /&gt;</font></p>  <p>Notice the bind command that associates the <em>Click</em> event with the <em>StartExerciseCommand</em> in the view model. Also, look at this snippet from currentFragment.xaml to illustrate how we data bind properties:</p>  <p><font face="Courier New">&lt;TextView      <br />&#160;&#160;&#160; android:textSize=&quot;22sp&quot;       <br />&#160;&#160;&#160;&#160; android:layout_width=&quot;match_parent&quot;       <br />&#160;&#160;&#160; android:layout_height=&quot;wrap_content&quot;       <br />&#160;&#160;&#160; local:MvxBind=&quot;Text Time&quot; /&gt;</font></p>  <p>Here bind again, this time the <em>Text</em> property of the <em>TextView</em> to the <em>Time</em> property in the view model.</p>  <p>Tying it altogether is MainView.cs, which is the code behind for our page (or activity). The code looks like this:</p>  <p><font face="Courier New">namespace Runner.Droid.Views      <br /> {       <br />&#160;&#160;&#160; [Activity(Label = &quot;Runner&quot;)]       <br />&#160;&#160;&#160; public class MainView : MvxTabsFragmentActivity       <br />&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; public new MainViewModel ViewModel       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; get { return (DataContext as MainViewModel); }       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</font></p> <font face="Courier New"></font>  <p><font face="Courier New">&#160;&#160;&#160;&#160;&#160;&#160;&#160; public MainView()      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : base(Resource.Layout.MainView, Resource.Id.actualtabcontent)       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</font></p> <font face="Courier New"></font>  <p><font face="Courier New">&#160;&#160;&#160;&#160;&#160;&#160;&#160; protected override void AddTabs(Bundle args)      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; try       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; AddTab&lt;CurrentTabFragment&gt;(&quot;Current&quot;, &quot;Current&quot;, args, ViewModel.Current);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; AddTab&lt;TotalTabFragment&gt;(&quot;Total&quot;, &quot;Total&quot;, args, ViewModel.Total);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; AddTab&lt;LapTabFragment&gt;(&quot;Lap&quot;, &quot;Lap&quot;, args, ViewModel.Lap);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; AddTab&lt;MapTabFragment&gt;(&quot;Map&quot;, &quot;Map&quot;, args, ViewModel);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; catch (Exception ex)       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</font></p> <font face="Courier New"></font>  <p><font face="Courier New">&#160;&#160;&#160;&#160;&#160;&#160;&#160; protected override void OnStart()      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; base.OnStart();       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ViewModel.CollectionService.Start();       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ViewModel.PeriodicService.Start();       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ViewModel.PositionService.Start();       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</font></p> <font face="Courier New"></font>  <p><font face="Courier New">&#160;&#160;&#160;&#160;&#160;&#160;&#160; protected override void OnStop()      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ViewModel.PositionService.Stop();       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ViewModel.PeriodicService.Stop();       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ViewModel.CollectionService.Stop();       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; base.OnStop();       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }       <br />&#160;&#160;&#160; }       <br /> }</font></p>  <p>This is pretty much it. Press F5 and watch the app run in all it’s glory <img class="wlEmoticon wlEmoticon-smile" alt="Smile" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/7318.wlEmoticon-smile_4515879C.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/7318.wlEmoticon_2D00_smile_5F00_4515879C.png" /></p>  <h1>Summary</h1>  <p>I hope I have shown you how easy it is to develop a cross-platform app based on Xamarin/MvvmCross. Remember that since Xamarin keeps the UI code and paradigms native, you still need to understand the platform and it’s frameworks However, given that we have a single code base, single programming language and a single development tool we will save a lot of development time in our projects. Happy Coding!</p>]]></content:encoded>
    </item>
    <item>
      <title>Going cross-platform with Xamarin–The Windows Phone App</title>
      <link>https://docs.microsoft.com/archive/blogs/thunbrynt/going-cross-platform-with-xamarinthe-windows-phone-app</link>
      <pubDate>Mon, 19 May 2014 02:16:43 GMT</pubDate>
      <dc:creator><![CDATA[Brynte]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/thunbrynt/2014/05/19/going-cross-platform-with-xamarinthe-windows-phone-app/</guid>
      <description><![CDATA[This blog post series is a documentation for a talk I give about cross-platform development with...]]></description>
      <content:encoded><![CDATA[<p><em>This blog post series is a documentation for a talk I give about cross-platform development with Xamarin. This series was co-authored by Johan Lindfors at <a href="https://www.coderox.se">Coderox</a>. This post talks about the structure of the Windows Phone app we want to port to Android.</em></p>  <h1>Introduction</h1>  <p>This series will provide a step-by-step instruction on how to port a small Windows Phone app to Android, using Xamarin and MvvmCross. This post will explain some basic concepts, what the app does and how the code is structured.</p>  <h1>What is Xamarin?</h1>  <p><a href="https://www.xamarin.com">Xamarin</a> is a third-party tool that enables you to write apps for Android, iOS and OS/X in C# using .NET framework but doing the user interface natively with the designers for each platform. Xamarin then generates native executable code, so the apps are indistinguishable from real native apps. The core benefit of this approach is to have all non-UI related code in C#/.NET in shared in one place, to be able to reuse it on multiple platforms. Often we see that up to 80% of the code gets reused between platforms, opening up to huge cost-savings when doing cross-platform development work. Xamarin also integrates nicely into Visual Studio, giving you a very efficient and agile development environment.</p>  <h1>What is MvvmCross?</h1>  <p><a href="https://github.com/MvvmCross/MvvmCross">MvvmCross</a> is an open-source, cross-platform framework that implements the MVVM pattern on all the above mentioned platforms. It will also give you the ability to use data binding on all these platforms, which is a very effective way to use code written with the MVVM pattern. </p>  <h1>What is MVVM?</h1>  <p>MVVM is a pattern for writing user interface code. MVVM stands for <em>Model – View – ViewModel </em>and is a variation of the MVC (<em>Model – View – Controller) </em>pattern. The different parts is as follows:</p>  <ul>   <li><strong>Model</strong>. Here is where you put all your entity classes and the services to provide you with operations on those. This code is not related to the UI at all and can be shared completely between platforms, par device specific stuff like position tracking etc. These implementations need to be implemented per client and we will look at how that is done in the most portable way.</li>    <li><strong>View</strong>. This layer contains all the views and the code needed to drive the user interaction. This is always done per platform and with Xamarin you use the designer etc. for the platform. We also program against the native framework, but wrapped in .NET framework wrapper classes so we can write this code in C# as well.</li>    <li><strong>ViewModel</strong>. This is the glue between the model and the views. For each view we should have a companion view model, and the view model should contain all the data for the view as properties. It should also contain all the commands the view needs to work with the data. The view model then makes calls down to the service layer and use the entities from the model. Data binding from the views is a very powerful construct that gives us a very responsive UI with almost no code at all, so this is used throughout the code.</li> </ul>  <h1>How is the code structured?</h1>  <p>Our phone app, which we ultimately want to port to Android, is a simple little app for tracking your running activities, like RunKeeper, Endomondo etc. It’s very simple but illustrates the basic concepts and provides a good base to illustrate how we port this. This is how the app looks like an action:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/2728.current_0F5F8BA0.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/2728.current_5F00_0F5F8BA0.png"><img title="current" style="display: inline; background-image: none;" border="0" alt="current" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/4137.current_thumb_475B9C7A.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/4137.current_5F00_thumb_5F00_475B9C7A.png" width="148" height="244" /></a><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/1031.lap_151F0501.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/1031.lap_5F00_151F0501.png"><img title="lap" style="display: inline; background-image: none;" border="0" alt="lap" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/3755.lap_thumb_4FC3D18C.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/3755.lap_5F00_thumb_5F00_4FC3D18C.png" width="148" height="244" /></a><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/2100.map_2F438246.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/2100.map_5F00_2F438246.png"><img title="map" style="display: inline; background-image: none;" border="0" alt="map" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/1385.map_thumb_193C550D.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/1385.map_5F00_thumb_5F00_193C550D.png" width="148" height="244" /></a></p>  <p>So, its basically a pivot with four views, <em>current, total, lap </em>and <em>map</em>. We have an app bar that has <em>start, stop</em> and <em>lap</em> buttons. On the lap page, there is a list of completed laps. That’s the app and we can run it in the emulator since we can fake a series of location updates with the excellent Windows Phone emulator.</p>  <p>As mentioned above, the code is written using the MVVM pattern, so we have the following folders in our project:</p>  <h2>Model</h2>  <p>Here we have a class that holds a single data Point (in our case a location at a specific time) and an interface and stock implementation of metrics around a Collection of data Points (speed, distance etc.).</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/2134.image_33C3842A.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/2134.image_5F00_33C3842A.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/3582.image_thumb_6C97FAEE.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/3582.image_5F00_thumb_5F00_6C97FAEE.png" width="278" height="484" /></a></p>  <h2>Services</h2>  <p>Here we have defined three interfaces and done three concrete implementations:</p>  <ul>   <ul>     <li><strong>Collection service</strong> (IDataPointCollectionService.cs, DataPointCollectionService.cs). This holds an internal collection of the data points collected. This is a <em>singleton</em> service, meaning that we only want one instance of this service running. Key implementation here is an event that is triggered when we get a new data point, driving updates to the user interface. This implementation is not platform specific and can be shared across platforms.</li>      <li><strong>Position service</strong> (IPositionService.cs, PositionService.cs). This service listen for location updates from the phone and sends them to the collection service. This is a platform specific service, and needs to be reimplemented for each platform.</li>      <li><strong>Periodic service</strong> (IPeriodicService.cs, PeriodicService.cs). This services fires an event every second, since we need to recalculate metrics regularly, even though we don’t get location updates. This is also a platform specific implementation.</li>   </ul> </ul>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/4331.image_11DF1212.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/4331.image_5F00_11DF1212.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/5556.image_thumb_6ED8E365.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/5556.image_5F00_thumb_5F00_6ED8E365.png" width="278" height="484" /></a></p>  <h2>ViewModels</h2>  <p>Here we define the view models that drives the user interface. I have chosen to a <em>MainViewModel</em> that contains the view models for the different pivots <em>current, total </em>and <em>lap</em>. I have also written a base class for all view models (<em>ViewModelBase</em>) and a base class for all pivots (<em>DataPointMetricsViewModel</em>). All properties propagate changes so that the user interface gets updated automatically.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/6012.image_59EC76C1.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/6012.image_5F00_59EC76C1.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/4578.image_thumb_76B02E9A.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/4578.image_5F00_thumb_5F00_76B02E9A.png" width="278" height="484" /></a></p>  <p>The rest of the project is pretty vanilla from the templates. MainPage.xaml has the user interface.</p>  <h1>Summary</h1>  <p>So this is the base we start from when we port this app to Android. Our first step is to extract all reusable code into a portable class library. Blog post is <a href="https://blogs.msdn.com/b/thunbrynt/archive/2014/05/16/going-cross-platform-with-xamarin-adding-a-portable-class-library.aspx">here</a>.</p>  <p>Also, if you are interested at this you should attend TechDays at Kistmässan 18-20 November 2014. There will be a preconference day where I and some colleagues will spend an entire day talking about this subject. More info can be found <a href="https://www.techdays.se/Program/Sessioner/Sa-har-bygger-du-for-bade-Windows-och-Windows-Phone-samtidigt!-men-jag-behover-den-for-iOS-och-Android-ocksa">here</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Going cross-platform with Xamarin–Adding MvvmCross to your solution</title>
      <link>https://docs.microsoft.com/archive/blogs/thunbrynt/going-cross-platform-with-xamarinadding-mvvmcross-to-your-solution</link>
      <pubDate>Mon, 19 May 2014 00:42:22 GMT</pubDate>
      <dc:creator><![CDATA[Brynte]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/thunbrynt/2014/05/19/going-cross-platform-with-xamarinadding-mvvmcross-to-your-solution/</guid>
      <description><![CDATA[This blog post series is a documentation for a talk I give about cross-platform development with...]]></description>
      <content:encoded><![CDATA[<p><em>This blog post <a href="https://blogs.msdn.com/b/thunbrynt/archive/2014/05/19/going-cross-platform-with-xamarin-the-windows-phone-app.aspx">series</a> is a documentation for a talk I give about cross-platform development with Xamarin. This series was co-authored by Johan Lindfors at <a href="https://www.coderox.se">Coderox</a>. This post talks about how we add the MvvmCross framework to our solution, in preparation for our Android implementation.</em></p>  <h1>Introduction</h1>  <p>Before we start our Android implementation, we need to do one more thing. Since we have used the MVVM pattern for the Windows Phone app, we want to continue to do so. This is not a requirement of course, but for the purpose of this article we will. The steps we need to take is to add the NuGet package and modify the code slightly to adhere to the requirements of this framework.</p>  <h1>MvvmCross principles</h1>  <p>MvvmCross is an <em>intention</em>-based framework, which means that it relies on naming conventions for finding classes to instantiate etc. It is also a view model-first framework, putting the view models in the center and instantiating views from this. MvvmCross also includes it’s own IoC-container which it relies on. IoC stands for I<em>nversion of Control</em> and helps us create classes through a central repository, giving us less code to write and easier to exchange implementations.</p>  <h1>Adding MvvmCross to the Portable Class Library</h1>  <p>First, let’s install the NuGet package for MvvmCross into the Runner.Core portable class library project. Right-click on the Runner.Core Project, select <em>Manage NuGet packages</em>. Click <em>Online</em> tab and then search for MvvmCross and install the Component as shown below:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/4401.image_5CEAF81B.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/4401.image_5F00_5CEAF81B.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/7633.image_thumb_7EB89FB6.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/7633.image_5F00_thumb_5F00_7EB89FB6.png" width="644" height="431" /></a></p>  <p>Click the Close button and examine your project. Your <em>References </em>now includes MVVM libraries. There is also a new ToDo-MvvmCross folder with instructions on how to port your product to MvvmCross:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/5226.image_6608B6CC.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/5226.image_5F00_6608B6CC.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/7875.image_thumb_1293B5BD.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/7875.image_5F00_thumb_5F00_1293B5BD.png" width="644" height="458" /></a></p>  <p>If we open the _Core.txt file we can see a checklist with the following items:</p>  <ul>   <li>Create a ViewModels folder and add a view model. We have already done this, although we need to modify the view model. It should derive from <em>MvxViewModel</em>. Since we have a <em>ViewModelBase</em> base class, we modify that. Open ViewModelBase.cs, change it to derive from <em>MvxViewModel</em> and only keep the <em>SetProperty</em> functions. It should look like this:</li> </ul>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/2313.image_679B0610.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/2313.image_5F00_679B0610.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/7624.image_thumb_694DA0EE.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/7624.image_5F00_thumb_5F00_694DA0EE.png" width="644" height="458" /></a></p>  <ul>   <li>Add an App.cs class – inside it place the code to start the app with the main view model. The file has been auto-generated, let’s just replace the name of the view model we want the app to start with. Here’s the content of App.cs:</li> </ul>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/8686.image_10679E8A.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/8686.image_5F00_10679E8A.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/0753.image_thumb_3954829D.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/0753.image_5F00_thumb_5F00_3954829D.png" width="644" height="458" /></a></p>  <p>This code will also register all our *Service.cs classes with the IoC container for automatic creation. More on this later. Now we completed the porting for our library. Let’s port the phone app as well.</p>  <h1>Adding MvvmCross to the phone app</h1>  <p>We need to go through a similar process here. First, let’s add the NuGet package to the Phone app as well. Right-click on the solution, select <em>Manage NuGet packages for solution…</em>, click Installed Packages, select MvvmCross and click manage:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/5736.image_44C9F442.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/5736.image_5F00_44C9F442.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/0636.image_thumb_5DA8099E.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/0636.image_5F00_thumb_5F00_5DA8099E.png" width="644" height="431" /></a></p>  <p>Click in the checkbox next to Runner.WP as this:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/1832.image_02F1B173.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/1832.image_5F00_02F1B173.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/8321.image_thumb_309A0D3C.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/8321.image_5F00_thumb_5F00_309A0D3C.png" width="484" height="484" /></a></p>  <p>If we look at the Runner.WP Project, it has added a number of references and a ToDo-MvvmCross folder here as well. The steps we need to take now are as follows:</p>  <ul>   <li>Add a reference to our portable class library. We already had that.</li>    <li>The Setup.cs file was automatically created and we leave it as is for know.</li>    <li>Change App.Xaml.cs so that it creates a 'new Setup(RootFrame)' during its constructor. I add the code the <em>InitializePhoneApplication() </em>function like this:</li> </ul>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/0726.image_0B59E685.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/0726.image_5F00_0B59E685.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/0172.image_thumb_1A066174.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/0172.image_5F00_thumb_5F00_1A066174.png" width="644" height="458" /></a></p>  <ul>   <li>Change App.Xaml.cs so that it intercepts the first navigation. The code should look like this:</li> </ul>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/1256.image_2A611786.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/1256.image_5F00_2A611786.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/8446.image_thumb_67671822.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/8446.image_5F00_thumb_5F00_67671822.png" width="644" height="458" /></a></p>  <ul>   <li>Add a Views folder - it must be called &quot;Views&quot; - and in this place a view - xaml.cs and .xaml. It must derive from <em>MvxPhonePage</em>. <strong>Important note. </strong>The page must also reside in the Views namespace otherwise the IoC container can’t find it. So, in the Views folder remove FirstView.xaml and move MainPage.xaml there. Then edit the MainPage.xaml and MainPage.xaml.cs to reside in the Views sub-namespace and that it derives from <em>MvxPhonePage</em>.</li> </ul>  <p>Now, we have completed the steps and when we run the application we can see that it behaves as before. Great! Are we done? No, not yet. Remember that we talked about MvvmCross being a <em>viewmodel-first</em> framework? This means that the view model is created first, and from the view model the correct page is created and properly setup, including setting the viewmodel as the <em>DataContext</em> for the page. But in MainPage.xaml.cs, we implicitly create the <em>MainViewModel</em> in the constructor. Let’s remove this and run again.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/8463.image_5C1D423E.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/8463.image_5F00_5C1D423E.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/7571.image_thumb_1ACC5C9C.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/7571.image_5F00_thumb_5F00_1ACC5C9C.png" width="393" height="484" /></a></p>  <p>Now we get an exception when the view model is created. Turns out the problem is that the <em>MainViewModel</em> takes instances of our services in the constructor, and the IoC container doesn’t know how to create concrete instances of <em>IPeriodicService </em>and <em>IPositionService</em>. We have to provide MvvmCross with a mapping for these two interfaces. We do this in Setup.cs in the phone app like this:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/5635.image_0DB230F1.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/5635.image_5F00_0DB230F1.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/1512.image_thumb_56BA21C1.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/1512.image_5F00_thumb_5F00_56BA21C1.png" width="644" height="458" /></a></p>  <blockquote>   <p>We run again and now the view comes up, but the position changes doesn’t come through. Why? The reason is that now have two singletons, one explicit in App.xaml.cs and one implicit when we registered the mapping in the IoC container. We need to remove our explicit construction and reference the implicit one. In app.xaml.cs, remove all references to our service properties and replace it with the following code in <em>InitializePhoneApplication()</em>:</p>    <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/2018.image_5B7C89E3.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/2018.image_5F00_5B7C89E3.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/6253.image_thumb_2D07D9FE.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/6253.image_5F00_thumb_5F00_2D07D9FE.png" width="644" height="458" /></a></p>    <p>And update the code in <em>PositionChanged</em> event handler to look like this:</p>    <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/4401.image_6430A650.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/4401.image_5F00_6430A650.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/7633.image_thumb_782C07F0.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/7633.image_5F00_thumb_5F00_782C07F0.png" width="644" height="458" /></a></p>    <p>Now, run the program again and see that it works now.</p>    <h1>Summary</h1>    <p>Here we have shown how to add the MvvmCross framework to your existing application. We have shown some of the caveats you can run into. Now we are properly setup to write the Android version of this app. Let’s go! Blog post is <a href="https://blogs.msdn.com/b/thunbrynt/archive/2014/05/20/going-cross-platform-with-xamarin-doing-the-android-port.aspx">here</a>.</p></blockquote>]]></content:encoded>
    </item>
    <item>
      <title>Going cross-platform with Xamarin–Adding a Portable Class Library</title>
      <link>https://docs.microsoft.com/archive/blogs/thunbrynt/going-cross-platform-with-xamarinadding-a-portable-class-library</link>
      <pubDate>Fri, 16 May 2014 05:19:55 GMT</pubDate>
      <dc:creator><![CDATA[Brynte]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/thunbrynt/2014/05/16/going-cross-platform-with-xamarinadding-a-portable-class-library/</guid>
      <description><![CDATA[This blog post series is a documentation for a talk I give about cross-platform development with...]]></description>
      <content:encoded><![CDATA[<p><em>This blog post <a href="https://blogs.msdn.com/b/thunbrynt/archive/2014/05/19/going-cross-platform-with-xamarin-the-windows-phone-app.aspx">series</a> is a documentation for a talk I give about cross-platform development with Xamarin. This series was co-authored by Johan Lindfors at <a href="https://www.coderox.se">Coderox</a>. This post talks about how we move code from the phone app to a portable class library, in preparation for our Android implementation.</em></p>  <h1>Introduction</h1>  <p>First we need to prepare the codebase so that we can reuse common code across platforms. There are different ways we can do this, but today we are going to move the code to a portable class library. A portable class library is a special .NET assembly where you target the platforms you want the code to run on. This will automatically limit the the part of .NET framework available to what’s common on your chosen platforms. </p>  <p>What’s great about this is that Xamarin for Android and Xamarin for iOS can be chosen as targets for this library. That means that we can move all our common code into this reusable Component to kick-start our Android development later. We will move all code that’s not view related or device specific. Here is how you do this.</p>  <h1>Moving the code</h1>  <p>So, this is what the project looks like today:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/6862.image_0B207D9B.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/6862.image_5F00_0B207D9B.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/5807.image_thumb_4BA27E70.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/5807.image_5F00_thumb_5F00_4BA27E70.png" width="644" height="458" /></a></p>  <p>First, right-click on the solution, choose Add –&gt; New Project… and select to create a new Portable Class Library as per below:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/5282.image_39A59F09.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/5282.image_5F00_39A59F09.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/5824.image_thumb_6365C7A4.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/5824.image_5F00_thumb_5F00_6365C7A4.png" width="644" height="446" /></a></p>  <p>Hit OK and assuming that you have Xamarin for iOS and Android installed, check in the following boxes and press OK one more time:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/3021.image_797906AB.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/3021.image_5F00_797906AB.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/1464.image_thumb_78C7DCC7.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/1464.image_5F00_thumb_5F00_78C7DCC7.png" width="430" height="484" /></a></p>  <p>Now, let’s move things over to portable class library. Start by removing Class1.cs, since it’s not needed. Then copy everything in <em>Model</em>, <em>Service</em> and <em>ViewModels</em> folders. Keep everything in the portable class library except PeriodicService.cs and PositionService.cs, and keep <strong><em>only </em></strong>these files in the Phone project. You should end up with a project structure like this:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/2553.image_4CD4AC8D.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/2553.image_5F00_4CD4AC8D.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/2475.image_thumb_7F183472.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/2475.image_5F00_thumb_5F00_7F183472.png" width="644" height="458" /></a></p>  <p>One final thing to do; make sure that the phone project references the portable class library project:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/7752.image_5B3EC13E.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/7752.image_5F00_5B3EC13E.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/4666.image_thumb_66B432E3.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/4666.image_5F00_thumb_5F00_66B432E3.png" width="644" height="458" /></a></p>  <p>Now, press F5 and see that we have the same functionality as before, but now all common code has been separated into a separate library, settings us up nicely for cross-platform development. We are moving closer to an Android version, but first we need to do one more step. Let’s port our code to use the MvvmCross framework.</p>  <h1>Summary</h1>  <p>I hope I have shown how easy it is to move your common code to a portable class library, and be ready for cross-platform development. Blog post about adding MvvmCross is <a href="https://blogs.msdn.com/b/thunbrynt/archive/2014/05/19/going-cross-platform-with-xamarin-adding-mvvmcross-to-your-solution.aspx">here</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Windows Phone 8.1 for Developers–Introducing Bluetooth LE</title>
      <link>https://docs.microsoft.com/archive/blogs/thunbrynt/windows-phone-8-1-for-developersintroducing-bluetooth-le</link>
      <pubDate>Sun, 04 May 2014 21:45:23 GMT</pubDate>
      <dc:creator><![CDATA[Brynte]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/thunbrynt/2014/05/04/windows-phone-8-1-for-developersintroducing-bluetooth-le/</guid>
      <description><![CDATA[This blog post is part of a series about how Windows Phone 8.1 affects developers. This blog...]]></description>
      <content:encoded><![CDATA[<em>This blog post is part of a </em><a href="https://blogs.msdn.com/b/thunbrynt/archive/2014/03/31/windows-phone-8-1-for-developers-overview.aspx"><i>series</i></a><em> about how Windows Phone 8.1 affects developers. This blog introduces the new Bluetooth LE support and is written by Jimmy Engström at Apeoholic and was originally posted <a href="https://www.apeoholic.se/post/2014/05/04/Windows-phone-81-and-Bluetooth-LE-Getting-started">here</a>.</em>  <h3>&#160;</h3>  <h3>Introduction</h3>  <p>With Windows phone 8.1 Microsoft also released the ability to communicate with Bluetooth Low Energy devices.    <br />This is really exciting for Windows phone developers, this way we can start developing apps that can talk to devices without draining the battery dry. </p>  <p>Sadly this is not available in the developer preview of Windows phone 8.1, but will be available when Windows Phone 8.1 is released for general availability.    <br /></p>  <h3>Pairing</h3>  <p>The first step is always to pair with the device you want to connect to. This is easy to do by going to Settings –&gt; Bluetooth on your phone and tapping on the device you wish to pair with, just as you would do with a&#160; “ordinary” Bluetooth device.</p>  <h3>&#160;</h3>  <h3>Capabilities</h3>  <p>To be able to communicate with Bluetooth Low energy (or Bluetooth Smart, as it’s also called) you need to add a capability to your app.    <br />This can’t be done from a GUI, you need to edit the package.appmanifest manually and add the following lines of code just above &lt;/Package&gt;.</p>  <pre class="brush: xml;">&lt;Capabilities&gt;
  &lt;m2:DeviceCapability Name=&quot;bluetooth.genericAttributeProfile&quot;&gt;
    &lt;m2:Device Id=&quot;any&quot;&gt;
      &lt;m2:Function Type=&quot;serviceId:1803&quot;/&gt;
    &lt;/m2:Device&gt;
  &lt;/m2:DeviceCapability&gt;
&lt;/Capabilities&gt;</pre>

<p>Now you are are set to start coding =)</p>

<p>&#160;</p>

<h3>Iterate through devices</h3>

<p>To keep this as simple as possible, I’ll just show you how to iterate through devices and pick up a predefined one.</p>

<pre class="brush: csharp;">BluetoothLEDevice currentDevice { get; set; }
string deviceName = &quot;Philips AEA1000&quot;;
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
    foreach (DeviceInformation di in await DeviceInformation.FindAllAsync(BluetoothLEDevice.GetDeviceSelector()))
    {
        BluetoothLEDevice bleDevice = await BluetoothLEDevice.FromIdAsync(di.Id);
        if (bleDevice.Name == deviceName)
        {
            currentDevice = bleDevice;
            break;
        }
    }
}</pre>

<h3>Find out what your device can do</h3>

<p>GATT (Generic Attribute Profile) provides profile discovery and description services for <a href="https://en.wikipedia.org/wiki/Bluetooth_Low_Energy">Bluetooth Low Energy</a> protocol, it basically makes it possible to ask your device what it can do. The documentation for this is very thorough and shows how to communicate.</p>

<p>Here is how to get a list of the GATTServices your device supports.</p>

<pre class="brush: csharp;">List&lt;string&gt; serviceList = new List&lt;string&gt;();
foreach (var service in currentDevice.GattServices)
{
    switch (service.Uuid.ToString())
    {
        case &quot;00001811-0000-1000-8000-00805f9b34fb&quot;:
            serviceList.Add(&quot;AlertNotification&quot;);
            break;
        case &quot;0000180f-0000-1000-8000-00805f9b34fb&quot;:
            serviceList.Add(&quot;Battery&quot;);
            break;
        case &quot;00001810-0000-1000-8000-00805f9b34fb&quot;:
            serviceList.Add(&quot;BloodPressure&quot;);
            break;
        case &quot;00001805-0000-1000-8000-00805f9b34fb&quot;:
            serviceList.Add(&quot;CurrentTime&quot;);
            break;
        case &quot;00001818-0000-1000-8000-00805f9b34fb&quot;:
            serviceList.Add(&quot;CyclingPower&quot;);
            break;
        case &quot;00001816-0000-1000-8000-00805f9b34fb&quot;:
            serviceList.Add(&quot;CyclingSpeedAndCadence&quot;);
            break;
        case &quot;0000180a-0000-1000-8000-00805f9b34fb&quot;:
            serviceList.Add(&quot;DeviceInformation&quot;);
            break;
        case &quot;00001800-0000-1000-8000-00805f9b34fb&quot;:
            serviceList.Add(&quot;GenericAccess&quot;);
            break;
        case &quot;00001801-0000-1000-8000-00805f9b34fb&quot;:
            serviceList.Add(&quot;GenericAttribute&quot;);
            break;
        case &quot;00001808-0000-1000-8000-00805f9b34fb&quot;:
            serviceList.Add(&quot;Glucose&quot;);
            break;
        case &quot;00001809-0000-1000-8000-00805f9b34fb&quot;:
            serviceList.Add(&quot;HealthThermometer&quot;);
            break;
        case &quot;0000180d-0000-1000-8000-00805f9b34fb&quot;:
            serviceList.Add(&quot;HeartRate&quot;);
            break;
        case &quot;00001812-0000-1000-8000-00805f9b34fb&quot;:
            serviceList.Add(&quot;HumanInterfaceDevice&quot;);
            break;
        case &quot;00001802-0000-1000-8000-00805f9b34fb&quot;:
            serviceList.Add(&quot;ImmediateAlert&quot;);
            break;
        case &quot;00001803-0000-1000-8000-00805f9b34fb&quot;:
            serviceList.Add(&quot;LinkLoss&quot;);
            break;
        case &quot;00001819-0000-1000-8000-00805f9b34fb&quot;:
            serviceList.Add(&quot;LocationAndNavigation&quot;);
            break;
        case &quot;00001807-0000-1000-8000-00805f9b34fb&quot;:
            serviceList.Add(&quot;NextDstChange&quot;);
            break;
        case &quot;0000180e-0000-1000-8000-00805f9b34fb&quot;:
            serviceList.Add(&quot;PhoneAlertStatus&quot;);
            break;
        case &quot;00001806-0000-1000-8000-00805f9b34fb&quot;:
            serviceList.Add(&quot;ReferenceTimeUpdate&quot;);
            break;
        case &quot;00001814-0000-1000-8000-00805f9b34fb&quot;:
            serviceList.Add(&quot;RunningSpeedAndCadence&quot;);
            break;
        case &quot;00001813-0000-1000-8000-00805f9b34fb&quot;:
            serviceList.Add(&quot;ScanParameters&quot;);
            break;
        case &quot;00001804-0000-1000-8000-00805f9b34fb&quot;:
            serviceList.Add(&quot;TxPower&quot;);
            break;
        default:
            break;
    }
}
MessageDialog md = new MessageDialog(String.Join(&quot;\r\n&quot;, serviceList));
md.ShowAsync();</pre>

<h3>
  <br />Time for some fun, Lets make it beep!</h3>

<p>In my case I have a Key finder (key fob) and it implements (among other services) the Immediate Alert Service, which makes it possible to make it beep. 
  <br />The GATT specification shows us how to communicate with the ImmediateAlertService 

  <br />Download the <a href="https://www.bluetooth.org/docman/handlers/downloaddoc.ashx?doc_id=239390">PDF here</a>.</p>

<p><a href="https://www.apeoholic.se/image.axd?picture=image_25.png"><img title="image" style="display: inline" alt="image" src="https://www.apeoholic.se/image.axd?picture=image_25.png" width="640" height="162" /></a> 

  <br />

  <br />

  <br />The documentation shows us that if we want to set the alert level we need to do that with “Write without Response”. 

  <br />The different values for Alert Level can be <a href="https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.alert_level.xml">found here</a>.</p>

<p>Value 0, meaning “No Alert”</p>

<p>Value 1, meaning “Mild Alert” </p>

<p>Value 2, meaning “High Alert” 
  <br />

  <br /></p>

<p>This snippet will make the key finder (key fob) sound a high alert.</p>

<pre class="brush: csharp;">var immediateAlertService = currentDevice.GetGattService(GattServiceUuids.ImmediateAlert);
var characteristics = immediateAlertService.GetCharacteristics(GattCharacteristicUuids.AlertLevel).First();
byte[] data = new byte[1];
data[0] = (byte)2;
await characteristics.WriteValueAsync(data.AsBuffer(), GattWriteOption.WriteWithoutResponse);</pre>

<p>&#160;</p>

<p>In my next blog post I will go through more of the things you can do with a key finder (key fob).</p>]]></content:encoded>
    </item>
    <item>
      <title>Windows Phone 8.1 for Developers–App packaging with appx</title>
      <link>https://docs.microsoft.com/archive/blogs/thunbrynt/windows-phone-8-1-for-developersapp-packaging-with-appx</link>
      <pubDate>Fri, 25 Apr 2014 06:00:24 GMT</pubDate>
      <dc:creator><![CDATA[Brynte]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/thunbrynt/2014/04/25/windows-phone-8-1-for-developersapp-packaging-with-appx/</guid>
      <description><![CDATA[This blog post is part of a series about how Windows Phone 8.1 affects developers. This blog post...]]></description>
      <content:encoded><![CDATA[<p><em>This blog post is part of a </em><a href="https://blogs.msdn.com/b/thunbrynt/archive/2014/03/31/windows-phone-8-1-for-developers-overview.aspx"><i>series</i></a><em> about how Windows Phone 8.1 affects developers. This blog post talks about how phone uses the new package model and is written by Andreas Hammar at Jayway and was originally posted <a href="https://www.jayway.com/2014/04/25/windows-phone-8-1-for-developers-app-packaging-with-appx/">here</a>.</em></p>  <h1>App packaging with appx</h1>  <p>When it comes to packaging and distribution of apps - Xap is out, Appx is in. Appx is the package model used by the Windows Store and offers some additional features over xap.</p>  <p>&#160;</p>  <h2>Appx generation</h2>  <p>To generate an appx package for your app, you invoke the <i>Store</i> menu, and choose to <i>create application package</i>.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/3175.image_7BCC506C.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/3175.image_5F00_7BCC506C.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/4111.image_thumb_6AE7AC7C.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/4111.image_5F00_thumb_5F00_6AE7AC7C.png" width="609" height="252" /></a></p>  <p>You then get to choose what platform and configuration you want to build – and also whether to create an <i>app bundle</i> or not, more on that later.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/7282.image_2F2AA47A.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/7282.image_5F00_2F2AA47A.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/5670.image_thumb_333782FD.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/5670.image_5F00_thumb_5F00_333782FD.png" width="609" height="497" /></a></p>  <p>This process generates one binary appxupload file per configuration, and a folder postfixed <i>Test</i> that contains the appx and other files, for deployment testing before upload to the Store.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/8267.image_4C35E3F3.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/8267.image_5F00_4C35E3F3.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/1667.image_thumb_349E3680.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/1667.image_5F00_thumb_5F00_349E3680.png" width="350" height="136" /></a></p>  <p>And looking inside one of the Test folders, we find the actual appx file, together with a binary appxsym file:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/0624.image_31F80B80.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/0624.image_5F00_31F80B80.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/0640.image_thumb_6868BD82.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/0640.image_5F00_thumb_5F00_6868BD82.png" width="334" height="57" /></a></p>  <h2>&#160;</h2>  <h2>Appx overview</h2>  <p>An appx contains the entire app, it is actually just a zip file with a different extension. Looking inside the actual appx file, and the Assets folder, we find all the files for the app:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/7026.image_71584FC1.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/7026.image_5F00_71584FC1.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/0458.image_thumb_67FF1B3E.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/0458.image_5F00_thumb_5F00_67FF1B3E.png" width="182" height="182" /></a><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/7317.image_376B9D86.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/7317.image_5F00_376B9D86.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/6685.image_thumb_0025164B.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/6685.image_5F00_thumb_5F00_0025164B.png" width="213" height="141" /></a></p>  <p>Noteworthy here is:</p>  <p><b>App.xbf&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </b>With the XAML stack from Windows comes the Xaml Binary Format, pre-compiled Xaml – a big performance win, especially on app startup</p>  <p><b>.scale-240.png&#160;&#160;&#160;&#160; </b>Apparently the app ships with scaling level 240 – on Windows we have 100, 140 and 180.</p>  <h2>&#160;</h2>  <h2>Bundles</h2>  <p>App bundles allow the resources of an app to be partitioned based on three parameters:</p>  <ul>   <li>Localization</li>    <li>Scaling</li>    <li>DirectX feature level</li> </ul>  <p>When creating a bundle, you enable the Windows Phone Store to only download the resources needed for that specific device.</p>  <p>To demonstrate this I’ve added some resource files to the project, both a different scaling level and two more languages (en-us Is the default).</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/3173.image_44680E48.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/3173.image_5F00_44680E48.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/8712.image_thumb_4874ECCB.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/8712.image_5F00_thumb_5F00_4874ECCB.png" width="261" height="345" /></a></p>  <p>You choose to create a bundle on the package creation page:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/5047.image_379048DB.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/5047.image_5F00_379048DB.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/3806.image_thumb_7996B81C.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/3806.image_5F00_thumb_5F00_7996B81C.png" width="234" height="97" /></a></p>  <p>And the resulting package files are instead just one big bundle.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/6866.image_425030E1.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/6866.image_5F00_425030E1.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/1602.image_thumb_3243F2DB.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/1602.image_5F00_thumb_5F00_3243F2DB.png" width="402" height="55" /></a></p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/5355.image_744A621C.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/5355.image_5F00_744A621C.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/5710.image_thumb_3D03DAE1.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/5710.image_5F00_thumb_5F00_3D03DAE1.png" width="358" height="74" /></a></p>  <p>Looking inside the appx for the bundle we find one appx per non-default resource-partition.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/8080.image_10E96EA1.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/8080.image_5F00_10E96EA1.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/52/40/metablogapi/3326.image_thumb_4E0D2A26.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-52-40-metablogapi/3326.image_5F00_thumb_5F00_4E0D2A26.png" width="301" height="176" /></a></p>  <h2>&#160;</h2>  <h2>Links</h2>  <p><a href="https://channel9.msdn.com/Events/Build/2014/2-640">BUILD 2014: App Packaging and Deployment for Windows Devices</a></p>  <p><a href="https://msdn.microsoft.com/en-us/library/windows/desktop/hh446593(v=vs.85).aspx">Packaging, deployment, and query of Windows Store apps</a></p>  <p><a href="https://msdn.microsoft.com/en-us/library/windows/apps/bg182885.aspx">App packaging</a></p>  <p><a href="https://code.msdn.microsoft.com/windowsapps/Games-with-resource-62bd72aa">Games with resource packages sample</a></p>  <p><a href="https://msdn.microsoft.com/en-us/library/windows/apps/dn263154.aspx">Package your Windows Store DirectX game</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Windows Phone 8.1 for Developers–Using the Credential Locker</title>
      <link>https://docs.microsoft.com/archive/blogs/thunbrynt/windows-phone-8-1-for-developersusing-the-credential-locker</link>
      <pubDate>Thu, 24 Apr 2014 11:56:33 GMT</pubDate>
      <dc:creator><![CDATA[Brynte]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/thunbrynt/2014/04/24/windows-phone-8-1-for-developersusing-the-credential-locker/</guid>
      <description><![CDATA[This blog post is part of a series about how Windows Phone 8.1 affects developers. This blog post...]]></description>
      <content:encoded><![CDATA[<p><em>This blog post is part of a </em><a href="https://blogs.msdn.com/b/thunbrynt/archive/2014/03/31/windows-phone-8-1-for-developers-overview.aspx"><i>series</i></a><em> about how Windows Phone 8.1 affects developers. This blog post talks about how to use the credential locker to store sensitive data and is written by Johan Silfversparre at Jayway and was originally posted <a href="https://www.jayway.com/2014/04/24/using-the-credential-locker">here</a>.</em></p>  <h2>Intro</h2> With the release of Windows Phone 8.1, the Credential Locker service is now available for Windows Phone app developers. This is great news for both first time users and those of us already using the service in our Windows 8.1 Store apps.    This Credential Locker service simplifies the task of handling user credentials and to store them securely encrypted on the device your app is running. It also roam the credentials between devices along with the user Microsoft account. Information is stored in the Credential Locker per user and cannot be shared between apps.   <h2>&#160;</h2>  <h2>When</h2> A common scenario for using the Credential Locker is if your app connect to services like social networking. By only asking the user for login information once and store it in the Credential Locker between sessions will provide a better user experience.   <h2>&#160;</h2>  <h2>How to</h2> <strong>Create a reference:</strong>   <pre class="lang:c# decode:true c#">using Windows.Security.Credentials
…
// public PasswordVault()
var vault = new.PasswordVault();</pre>
<strong>Store user credential method:</strong> 

<pre class="lang:c# decode:true c#">// public void Add(PasswordCredential credential)
vault.Add(new PasswordCredential(&quot;resourceName&quot;, “username”, “password”));</pre>
<strong>Retrieve list of all user credentials:</strong> 

<pre class="lang:c# decode:true c#">// public IReadOnlyList RetrieveAll()
Var list=vault.RetrieveAll();</pre>
<strong>Retrieve list of user credentials by user name:</strong> 

<pre class="lang:c# decode:true c#">// public IReadOnlyList FindAllByUserName(string userName)
var list = vault.FindAllByUserName(“username”);</pre>
<strong>Retrieve list of user credentials by resource name:</strong> 

<pre class="lang:c# decode:true c#">// public IReadOnlyList FindAllByResource(string resource)
var list = vault.FindAllByResource(“resourceName”);</pre>
<strong>Retrieve specific user credential by username and resource:</strong> 

<pre class="lang:c# decode:true c#">// public PasswordCredential Retrieve(string resource,string username)
var list = vault.Retrieve(“resourceName”, “username”);</pre>
<strong>Delete user credential:</strong> 

<pre class="lang:c# decode:true c#">// public void Remove(PasswordCredential credential)
vault.Remove(new PasswordCredential(&quot;resourceName, userName, password));</pre>

<h2>Best practices</h2>

<ul>
  <li>Use the Credential Locker to store passwords, not large data blocks. </li>

  <li>Make sure the user has successfully signed in and opted to save passwords before storing them in the Credential Locker. </li>
</ul>

<h2>&#160;</h2>

<h2>Summary</h2>
Another option for handling user authentication is now available for you as a Windows Phone app developer. The Credential Locker service is introduced and you use it in the same way as in your Windows 8 apps.


]]></content:encoded>
    </item>
    <item>
      <title>Windows Phone 8.1 for Developers–The Background Media Player</title>
      <link>https://docs.microsoft.com/archive/blogs/thunbrynt/windows-phone-8-1-for-developersthe-background-media-player</link>
      <pubDate>Thu, 24 Apr 2014 11:51:55 GMT</pubDate>
      <dc:creator><![CDATA[Brynte]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/thunbrynt/2014/04/24/windows-phone-8-1-for-developersthe-background-media-player/</guid>
      <description><![CDATA[This blog post is part of a series about how Windows Phone 8.1 affects developers. This blog post...]]></description>
      <content:encoded><![CDATA[<p><em>This blog post is part of a </em><a href="https://blogs.msdn.com/b/thunbrynt/archive/2014/03/31/windows-phone-8-1-for-developers-overview.aspx"><i>series</i></a><em> about how Windows Phone 8.1 affects developers. This blog post talks about how to use the background media player and is written by Per-Olof Bondesson, Robert Hedgate&#160; and Andreas Hammar at Jayway and was originally posted <a href="https://www.jayway.com/2014/04/24/windows-phone-8-1-for-developers-the-background-media-player">here</a>.</em></p>  <h3>Dude… what is going on here?!</h3> Right! You are developing a new music app on Windows phone 8.1 and nothing looks like it did a week ago. Gone is the <i>MediaService</i> to find the music, the <i>BackgroundPlayer</i> and all other classes that you were used to. This post is here to help you find your bearing with the new API’s.   <h2>&#160;</h2>  <h2>Creating the background service</h2>  <h3>Adding the lib</h3> Create a new Windows Runtime Component. This is where your entry point for the Audio task will be. The entry point is a class that implements IBackgroundTask. This gives you one method that will be invoked on startup of the Audio task named <i>Run</i>. In order to keep the Task alive indefinitely you need to keep track of the deferral that exists on the <i>IBackgroundTaskInstance</i>. Placing the deferral in a field for safe keeping will be enough. When the operating system cancels your task you will need to call <i>Complete</i> on this said deferral. An example of a bare bone implementation of your task should look something like the following   <pre class="lang:c# decode:true">public sealed class AudioPlayer : IBackgroundTask
{
private BackgroundTaskDeferral _deferral;
public void Run(IBackgroundTaskInstance taskInstance)
    {
        _deferral = taskInstance.GetDeferral();
        taskInstance.Canceled += TaskInstance_Canceled;
    }
private void TaskInstance_Canceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason)
    {
        _deferral.Complete();
    }
}</pre>
<span style="line-height: 1.5em">Note that right now the task isn’t really an audio player. But it is enough code to test that we have a functioning task. At least we will be able to test it, as soon as we have enabled it in the app manifest.</span> 

<h3>&#160;</h3>

<h3>Enabling the background player</h3>

<p>Open the app manifest. In Declarations add a BackgroundTask, then check the <i>Audio</i> task type and point the <i>Entry Point</i> to the <i>AudioPlayer</i> class that we created in the previous part. It should look something like the following <img alt="" src="data:image/png;base64,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" /> </p>

<p>After this, we need to reference the Windows Runtime Component in the app project. There is no need to use a <i>BackgroundTaskBuilder</i> for an Audio task. The way we start the background task is by simply by accessing <i>BackgroundMediaPlayer.Current</i>. You can verify this by adding a break point in the <i>AudioPlayer</i> class. That’s it for the basic set up. Next up is how we use the code we have made to play some music. </p>

<h2>Background player</h2>

<h3>Playing music</h3>
The new background player got three simple methods for playing songs. <i>SetFileSource, SetStreamSource</i> and <i>SetUriSource</i>. Only one of these can be called from the foreground application, namely the <i>SetUriSource</i> method. The others needs to be used from your task instead. The reason for this is that the background player don´t have access to the memory where <i>SetFIleSource</i> or <i>SetStreamSource</i> is located unless it is set in the task. 

<h3>&#160;</h3>

<h3>Play next song when the current song ended</h3>
In our <i>AudioPlayer</i> class we can hook up to the MediaEnded event. Here we can find the next song to play and start playing it. 

<h3>&#160;</h3>

<h3>Hey where is the “Tag”?! (Communication with the foreground app)</h3>
Tag is no more! The communication between the two processes is now done by using events. 

<h3>&#160;</h3>

<h3>Changing song from the foreground</h3>
If you want to change song from the foreground you just call: 

<pre class="lang:c# decode:true">BackgroundMediaPlayer.Current.SetUriSource(new Uri(&quot;ms-appx:///Assets/Media/Ring02.wma&quot;));
BackgroundMediaPlayer.Current.Play();</pre>
Remember to use SetUriSource because the other overloads will throw exceptions. 

<h3>&#160;</h3>

<h3>Changing song from the background</h3>
To do this we need to tell the background to start playing a song. This is done by calling the BackgroundMediaPlayer function SendMessageToBackground: 

<pre class="lang:c# decode:true">BackgroundMediaPlayer.SendMessageToBackground(new ValueSet { { &quot;play&quot;, &quot;0&quot; } });</pre>
The background AudioPlayer need to have set up to listen to the message in the Run method: 

<pre class="lang:c# decode:true">BackgroundMediaPlayer.MessageReceivedFromForeground += BackgroundMediaPlayer_MessageReceivedFromForeground;</pre>
After receiving the message just do the same as in the forground to play songs. 

<h3>&#160;</h3>

<h3>Listen to event from the system</h3>
When your app is not active but your set up background player is the user can click on the player and expect your app to respond to these events. It can be for example play, pause, next and previous. To do this you need to set up this code in your AudioTask: 

<pre class="lang:c# decode:true">systemmediatransportcontrol = SystemMediaTransportControls.GetForCurrentView();
systemmediatransportcontrol.ButtonPressed += systemmediatransportcontrol_ButtonPressed;
systemmediatransportcontrol.PropertyChanged += systemmediatransportcontrol_PropertyChanged;
systemmediatransportcontrol.IsEnabled = true;
systemmediatransportcontrol.IsPauseEnabled = true;
systemmediatransportcontrol.IsPlayEnabled = true;
systemmediatransportcontrol.IsNextEnabled = true;
systemmediatransportcontrol.IsPreviousEnabled = true;</pre>
Then in the function systemmediatransportcontrol_ButtonPressed your app will receive the events from the phone. You can then from the AudioTask send an event to the forground using BackgroundMediaPlayer.SendMessageToForeground. This has to be set up in the foreground to work: 

<pre class="lang:c# decode:true">BackgroundMediaPlayer.MessageReceivedFromBackground += BackgroundMediaPlayer_MessageReceivedFromBackground;</pre>
You can now change your app if it is running to correspond to what the background is up to, changing song, pause etc. 

<h2>&#160;</h2>

<h2>Summary</h2>
This was a quick introduction on how to use the BackgroundMediaPlayer. It is a bit of work to get it to work but luckily there is a lot of help. Please look at <a href="https://msdn.microsoft.com/en-US/library/windows/apps/xaml/dn642090">https://msdn.microsoft.com/en-US/library/windows/apps/xaml/dn642090</a> for info and <a href="https://code.msdn.microsoft.com/wpapps/BackgroundAudio-63bbc319">https://code.msdn.microsoft.com/wpapps/BackgroundAudio-63bbc319</a> to see a working example.


]]></content:encoded>
    </item>
    <item>
      <title>Windows Phone 8.1 for Developers–Application Data</title>
      <link>https://docs.microsoft.com/archive/blogs/thunbrynt/windows-phone-8-1-for-developersapplication-data</link>
      <pubDate>Thu, 24 Apr 2014 11:44:51 GMT</pubDate>
      <dc:creator><![CDATA[Brynte]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/thunbrynt/2014/04/24/windows-phone-8-1-for-developersapplication-data/</guid>
      <description><![CDATA[This blog post is part of a series about how Windows Phone 8.1 affects developers. This blog post...]]></description>
      <content:encoded><![CDATA[<p><em>This blog post is part of a </em><a href="https://blogs.msdn.com/b/thunbrynt/archive/2014/03/31/windows-phone-8-1-for-developers-overview.aspx"><i>series</i></a><em> about how Windows Phone 8.1 affects developers. This blog post talks about how to store application&#160; data and is written by Robert Hedgate at Jayway and was originally posted <a href="https://www.jayway.com/2014/04/23/windows-phone-8-1-for-developers-application-data">here</a>.</em></p>  <h3>Introduction</h3> In this blog post I will do a quick overview of what is new with application data in Windows Phone 8.1. This is the first impression of the functions so I do recommend you to take a look at MSDN if you want a deeper understanding of how it works.   <h3>&#160;</h3>  <h3>What is the same as before</h3> Saving data to local storage works as before. Here is a code example of how it could look like:   <div id="scid:887EC618-8FBE-49a5-A908-2339AF2EC720:92545767-a119-4eb3-aeb5-8052bb7261e2" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">   <pre class="theme:vs2012 lang:c# decode:true">var localFolder = ApplicationData.Current.LocalFolder;
var localFile = await localFolder.CreateFileAsync(&quot;localFile.txt&quot;, CreationCollisionOption.ReplaceExisting);            
var fileBytes = System.Text.Encoding.UTF8.GetBytes(&quot;some text string&quot;);
using (var s = await localFile.OpenStreamForWriteAsync())
{
    s.Write(fileBytes, 0, fileBytes.Length);
}</pre>
</div>

<h3>What is new</h3>
Even before you could instead of targeting LocalFolder target RoamingFolder or TemporaryFolder. This code did compile however it did throw a not implemented exception when you ran the code. In Windows Phone 8.1 it is now implemented. The code structure is the same as before, just change what folder you’re targeting. This is exactly as it works on Windows 8.1. Another new function which is very useful is the FileIO.WriteTextAsync. This makes it very easy to write text to files: 

<div id="scid:887EC618-8FBE-49a5-A908-2339AF2EC720:0aec6223-3021-4603-a317-e8d1cfc7c151" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">
  <pre class="theme:vs2012 lang:c# decode:true">var tempFolder = ApplicationData.Current.TemporaryFolder;
var tempFile = await roamingFolder.CreateFileAsync(&quot;tempFile.txt&quot;, CreationCollisionOption.ReplaceExisting);
await FileIO.WriteTextAsync(tempFile, &quot;some text string&quot;);</pre>
</div>

<h4>TemporaryFolder</h4>
Why use the TemporaryFolder? This is the place where you can save data without thinking of have to remove it later. The data is saved between sessions but is removed when Windows Phone deem it necessary, e g running low on memory. Saving data between sessions is perhaps not the best idea but TemporaryFolder can be used for example for sharing data between several view when you for some reason don´t want to keep the data in memory. You can save images to the temporary folder for use in your views if you don´t want to persist them in your local folder. From XAML you can target the TemporaryFolder by using <i>ms-appdata:///temp/</i>. Example of image XAML: 

<div id="scid:887EC618-8FBE-49a5-A908-2339AF2EC720:87266034-21a0-448e-a975-8dc041a6e86b" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">
  <pre class="theme:vs2012 lang:c# decode:true"><img alt="" /></pre>
</div>

<h4>RoamingFolder</h4>
This is a very useful function. If you save data to the RoamingFolder the data is available on every device the app is installed, of course only if you log in with the same id. Perhaps it is more useful on Windows Store apps because often you have more than one device. But now when the stores will merge one can roam data between a Windows 8.1 app and a Windows Phone 8.1 app, just set the same app id to both apps in the store. If you want to find out when roaming data has been changed by someone else you need to listen to DataChanged. This fires if roaming data is change by another app: 

<div id="scid:887EC618-8FBE-49a5-A908-2339AF2EC720:1d4f7a18-7334-4416-a702-b0ba0a8b1669" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">
  <pre class="theme:vs2012 lang:c# decode:true">applicationData.DataChanged += DataChangedHandler;

private async void DataChangedHandler(ApplicationData appData, object o)
{
    // Add code
}</pre>
</div>

<h4>RoamingStorageQuota</h4>

<p>How much data can you roam? By calling RoamingStorageQuota you get the amount of data possible to roam. If you try to roam more data than RoamingStorageQuota specifies the system stop replication the data until it below the limit again. The normal amount of data possible to roam is 100kb. </p>

<p>
  <div id="scid:887EC618-8FBE-49a5-A908-2339AF2EC720:98c6efb6-08f7-4534-b4c6-250b30a60fd1" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">
    <pre class="theme:vs2012 lang:c# decode:true">var quota = applicationData.RoamingStorageQuota;</pre>
  </div>
</p>

<h4>Settings</h4>

<p>The settings saving is also the same as Windows 8.1. Instead of targeting LocalStorage it is possible to target LocalSettings, there is also a RoamingSettings. This works the same as folders does, local saves locally and roaming saves to the cloud. How do settings work then? Quite easy actually, just fetch the settings and save: </p>

<p>
  <div id="scid:887EC618-8FBE-49a5-A908-2339AF2EC720:f91786ef-d494-4acd-ba29-65a1a25ad856" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">
    <pre class="theme:vs2012 lang:c# decode:true">var roamingSettings = ApplicationData.Current.RoamingSettings;
roamingSettings.Values[&quot;MySetting&quot;] = &quot;Hello World&quot;;</pre>
  </div>
</p>

<p>In addition to save text to a setting one can save a composite value. This is a setting which contains several settings: </p>

<p>
  <div id="scid:887EC618-8FBE-49a5-A908-2339AF2EC720:4735aa76-0d13-4087-8813-ff845b1a78b6" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">
    <pre class="theme:vs2012 lang:c# decode:true">var composite = new ApplicationDataCompositeValue();
composite[settingName1] = 1;
composite[settingName2] = &quot;world&quot;;
roamingSettings.Values[&quot;MyCompositeSetting&quot;] = composite;</pre>
  </div>
</p>

<p>It is also possible to create containers in the settings. This for making it easier to structure the settings. Example of a container: </p>

<p>
  <div id="scid:887EC618-8FBE-49a5-A908-2339AF2EC720:f793343e-f144-4708-b41a-c19ff12ea4e9" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">
    <pre class="theme:vs2012 lang:c# decode:true">var container = localSettings.CreateContainer(&quot;exampleContainer&quot;, ApplicationDataCreateDisposition.Always);
if (localSettings.Containers.ContainsKey(&quot;exampleContainer&quot;))
{
    localSettings.Containers[&quot;MyContainer&quot;].Values[&quot;MySetting&quot;] = &quot;Hello Windows&quot;;
}</pre>
  </div>
</p>

<p>If you use RoamingSettings changes can also be detected using the </p>

<p>
  <div id="scid:887EC618-8FBE-49a5-A908-2339AF2EC720:0e77aca8-22ea-47b4-b7eb-8fa72ca42bb9" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">
    <pre class="theme:vs2012 lang:c# decode:true">applicationData.DataChanged += DataChangedHandler;</pre>
  </div>
</p>

<h4>Version</h4>

<p>If you´re saving data and update your app you might need to use versioned data. Versioning enables you to change the application data format used in a future release of your app without causing compatibility problems with previous releases of your app. The app checks the version of the data in the data store, and if it is less than the version the app expects, the app should update the application data to the new format and update the version. The version start at zero and can be obtain by checking </p>

<p>
  <div id="scid:887EC618-8FBE-49a5-A908-2339AF2EC720:7b0b3f40-f0fd-46e8-a1a8-b8d5a4fe8541" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">
    <pre class="theme:vs2012 lang:c# decode:true">var version = ApplicationData.Current.Version;</pre>
  </div>
</p>

<p>if the version is lower than the expected to some converting and set the version to the correct one </p>

<p>
  <div id="scid:887EC618-8FBE-49a5-A908-2339AF2EC720:2ccfb583-a263-43ce-be88-2eb7cd2412f7" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">
    <pre class="theme:vs2012 lang:c# decode:true">ApplicationData.Current.SetVersionAsync(1, SetVersionHandler);</pre>
  </div>
</p>

<h3>Summary</h3>
It is very nice to have the same data handling as in Windows 8.1. It is now possible to roam, save settings etc. This makes it easier to develop and share code between Windows Phone 8.1 and Windows 8.1 projects.


]]></content:encoded>
    </item>
  </channel>
</rss>