Android to Windows 8: Working with Key Value Pairs

May 9, 2013

Users often want to save the highest level that they reached in a game and then continue playing at that level when they return to their game. Or they want to continue reading where they left off when they return to a book reader.

One way you can enable this is by saving key-value pairs that persist on the user’s device between sessions and even after an app closes. In Android apps, these key-value pairs are called shared preferences. In Windows Store apps, they’re called application settings or just app settings.

To read and write shared preferences in Android apps, you use the SharedPreferences class. To read and write app settings in Windows Store apps, you use the ApplicationData class.

Windows tip
In Windows Store apps, you can also create key-value pairs by using the Dictionary class, but such pairs are stored only in local memory. They go away after they go out of scope in your app’s code.

Here’s how app settings work behind the scenes for Windows Store apps. When a user installs an app, Windows creates a special location and some special registry entries on the device to store that app’s settings. You don’t need to worry about where to find this location and the registry entries, because Windows tracks them for you. You just use the ApplicationData class to access them. If the user ever uninstalls the app, Windows automatically removes the matching app settings location and registry entries. You don’t have to worry about cleaning them up.

Windows tip
You can store more than just app-related settings. For example, you can store documents that are related to that particular app. However, if the user uninstalls that app, those related documents will automatically be removed, too. If those documents are particularly valuable, store them in a more permanent location, like the user’s SkyDrive.An app’s related settings and files together are called its application data, or just app data. Only app settings are covered in this post.

In Windows Store apps, you can store app settings in two ways: local and roaming. Local settings are stored only on the current device. Roaming settings are shared among all devices that the user installed the app on.

Here are all of the data types that you can create app settings for.

Boolean Guid Rect UInt16
Byte Int16 Single UInt32
Char Int32 Size UInt64
Char16 Int64 String Uri
DateTime Object TimeSpan Void
Double Point UInt8

Here’s how to create and get app settings in code.

Create app settings

In a Windows Store app, to create a local app setting with a key of “Name” and a value of “Me”, write code like this.

var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
localSettings.Values["Name"] = "Me";

To create a similar roaming app setting, write code like this.

var roamingSettings = Windows.Storage.ApplicationData.Current.RoamingSettings;
roamingSettings.Values["Name"] = "Me";
Windows tip
While you can store app settings in both the local location and the roaming location, you don’t have to.
Android tip
In Android apps, to create a similar shared preference, write code like this.

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = sharedPref.edit(); 
editor.putString("Name", "Me"); 
editor.commit();

You can share preferences among apps by using interactive mechanisms in the ContentProvider, BroadcastReceiver, and Service classes. In contrast, Windows Store apps can access only their own app settings.

Get app settings

In a Windows Store app, to get a local app setting with a key of “Name” and a default value of “Me” (that is, the value “Me” is returned if the app can’t find the “Name” key), write code like this.

string nameValue = "";
var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;

Object value = localSettings.Values["Name"];

if (!value)
 nameValue = value.ToString();
else
 nameValue = "Me";

To get a similar, roaming app setting, write code like this.

string nameValue = "";
var roamingSettings = Windows.Storage.ApplicationData.Current.RoamingSettings;

Object value = roamingSettings.Values["Name"];

if (!value)
 nameValue = value.ToString();
else
 nameValue = "Me";
Android tip
In Android apps, to get a similar shared preference, write code like this.

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
string nameValue = sharedPref.getString("Name", "Me");

Next steps

To learn more about how to create and get app settings, see these resources:

· Quickstart: Local application data

· Quickstart: Roaming application data

· Application data sample