Xamarin.Forms - Application Preferences Using Xamarin.Essentials

Introduction
 
Application Preferences Using Xamarin Essentials 
 
Xamarin.Forms code runs on multiple platforms - each of which has its own filesystem. This means that reading and writing the files are most easily done using the native file APIs on each platform. Alternatively, embedded resources are a simpler solution to distribute data files with an app.
 
Xamarin.Essentials
Application Preferences Using Xamarin Essentials 
 
Xamarin.Essentials plugin provides 20+ cross-platform APIs for mobile application development. Xamarin.Essentials API works with all Xamarin.Forms, Xamarin.Android, Xamarin.iOS, or UWP applications that can be accessed from shared code. We are developing Xamarin with Android, iOS and UWP apps, but now Xamarin.Essentials overcomes the problem, so developers can access every native platform API using C#. This plugin provides many APIs so initially, there is no need for more plugins for Xamarin. Xamarin.Essentials plugin impacts your app's minimum size.
 
Platform Support
 
Xamarin.Essentials supports the following platforms and operating systems.
 
 Platform Version
 Android 4.4 (API 19) or earlier
 iOS 10.0 or higher
 UWP 10.0.16299.0 or earlier
 
Application Storage

Xamarin Android - Shared Preferences
 
Android provides many ways of storing the data of an application. One of the ways is called Shared Preferences. Shared Preferences allows you to save and retrieve the data in the form of a key-value pair.
 
In order to use shared preferences, you have to call a method, getSharedPreferences() ,that returns a SharedPreference instance pointing to the file that contains the values of preferences.
 
Xamarin iOS - NSUserDefaults
 
The NSUserDefaults class provides a way for iOS Apps and Extensions to programmatically interact with the system-wide Default System. By using the Defaults System, the user can configure an app's behavior or styling to meet their preferences (based on the design of the app). For example, to present data in Metric vs Imperial measurements or select a given UI Theme.
 
UWP - ApplicationDataContainer
 
Represents a container for app settings. The methods and properties of this class support creating, deleting, enumerating, and traversing the container hierarchy.
 
Xamarin Forms - Properties Dictionary
 
The Application subclass has a static Properties dictionary which can be used to store data, in particular for use in the OnStart, OnSleep, and OnResume methods. This can be accessed from anywhere in your Xamarin.Forms code using Application.Current.Properties.
The Properties dictionary uses a string key and stores an object value.
 
Xamarin.Essentials
 
Preferences class helps to store application preferences in a key/value store using Xamarin.Essentials
 
Preferences Supported Data Types
  1. string
  2. int
  3. bool
  4. double
  5. float
  6. long
  7. DateTime
Prerequisites
  • Visual Studio 2017 (Windows or Mac)
Setting up a Xamarin.Forms Project
 
Start by creating a new Xamarin.Forms project. You’ll learn more by going through the steps yourself.
 
Choose the Xamarin.Forms App Project type under Cross-platform/App in the New Project dialog.
 
Application Preferences Using Xamarin Essentials 
 
Name your app, select “Use Portable Class Library” for shared code, and target both Android and iOS.
 
Application Preferences Using Xamarin Essentials 
 
You probably want your project and solution to use the same name as your app. Put it in your preferred folder for projects and click Create.
 
Application Preferences Using Xamarin Essentials 
 
You now have a basic Xamarin.Forms app. Click the play button to try it out.
 
Application Preferences Using Xamarin Essentials 
 
Setting up the User Interface
 
Go to MainPage.Xaml and write the following code.
 
MainPage.xaml
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2. <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"  
  3.              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"  
  4.              xmlns:local="clr-namespace:XamarinEssentials"  
  5.              x:Class="XamarinEssentials.MainPage">  
  6.   
  7.     <StackLayout>  
  8.         <StackLayout HorizontalOptions="Center" VerticalOptions="Start">  
  9.          <Image Margin="0,50,0,0" x:Name="imgBanner" Source="banner.png" ></Image>  
  10.          <Image Margin="0,0,0,10" x:Name="imgXamarinEssential" Source="xamarinessential.png" ></Image>  
  11.          <Label Margin="0,0,0,10" FontAttributes="Bold" FontSize="Large" TextColor="#CA6F1E" HorizontalTextAlignment="Center" Text="Preferences"></Label>  
  12.          <Entry x:Name="txtValue" Placeholder="Add Value"> </Entry>  
  13.          <Button x:Name="btnAdd" Text="Add" Clicked="btnAdd_Clicked"/>  
  14.          <Button x:Name="btnGet" Text="Get" Clicked="btnGet_Clicked" />  
  15.          <Button x:Name="btnRemove" Text="Remove" Clicked="btnRemove_Clicked" />  
  16.          <Button x:Name="btnClear" Text="Clear All"  Clicked="btnClear_Clicked"/>  
  17.         </StackLayout>  
  18.     </StackLayout>  
  19.   
  20. </ContentPage>  
Application Preferences Using Xamarin Essentials
 
Add Xamarin Essentials
 
In this step, add Xamarin.Essentials to your project. You can install Xamarin.Essentials via NuGet, or you can browse the source code on GitHub.
 
Go to Solution Explorer and select your solution. Right-click and select "Manage NuGet Packages for Solution". Search "Xamarin.Essentials" and add Package. Remember to install it for each project (PCL, Android, iO, and UWP).
 
Application Preferences Using Xamarin Essentials 
 
Xamarin.Essentials requires platform-specific setup

Android

The following steps are necessary for Android.
  1. Xamarin.Essentials supports a minimum Android version of 4.4
  2. Target Android version for compiling must be 8.1, API level 27.
In the Android project's MainActivity that is launched, Xamarin.Essentials must be initialized in the OnCreate method.
 
MainActivity.cs
  1. Xamarin.Essentials.Platform.Init(this, bundle);  
Xamarin.Essentials must receive any OnRequestPermissionsResult. Write the following code for runtime permission.
 
MainActivity.cs
  1. public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)  
  2. {  
  3.     Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);  
  4.   
  5.     base.OnRequestPermissionsResult(requestCode, permissions, grantResults);  
  6. }  
iOS
 
No additional setup required.
 
UWP
 
No additional setup required.
 
Store Value
 
The Preferences uses a string key and stores an object value.
 
MainPage.xaml.cs
  1. void btnAdd_Clicked(object sender, System.EventArgs e)  
  2.         {  
  3.             AddValue("mykey", txtValue.Text);  
  4.             txtValue.Text = string.Empty;  
  5.             DisplayAlert("Success""Value Stored""OK");  
  6.         }  
  7.   
  8. //Add Value to Preference  
  9. public void AddValue(string key, string value)  
  10.         {  
  11.             Preferences.Set(key, value);  
  12.         }  
Click the play button to try it out.
 
Application Preferences Using Xamarin Essentials 
 
Get Value
 
Preferences stores the objects, so you need to cast its value before using it.
 
MainPage.xaml.cs
  1. void btnGet_Clicked(object sender, System.EventArgs e)  
  2.         {  
  3.             string value = GetValue("mykey");  
  4.             DisplayAlert("Success""Your Value is "+value, "OK");  
  5.         }  
  6.   
  7.   
  8. //Get Value from Preference  
  9. public string GetValue(string key)  
  10.         {  
  11.             return  Preferences.Get(key,"");  
  12.         }  
Click the play button to try it out
 
Application Preferences Using Xamarin Essentials 
 
Remove Value
 
If you want to remove values, you can remove them.
 
MainPage.xaml.cs
  1. void btnRemove_Clicked(object sender, System.EventArgs e)  
  2.         {  
  3.             DeleteValue("mykey");  
  4.             DisplayAlert("Success""Removed""OK");  
  5.         }  
  6.   
  7.   
  8. //Remove Preference Value  
  9.         public void DeleteValue(string key)  
  10.         {  
  11.             Preferences.Remove(key);  
  12.         }  
Click the play button to try it out.
 
Application Preferences Using Xamarin Essentials 
 
Clear Values
 
If you want clear all Properties, you can use the following code.
 
MainPage.xaml.cs
  1. void btnClear_Clicked(object sender, System.EventArgs e)  
  2.         {  
  3.             Clear();  
  4.             DisplayAlert("Success""All Values Cleared""OK");  
  5.         }  
  6.   
  7. //Clear all Preference Values  
  8.         public void Clear()  
  9.         {  
  10.             Preferences.Clear();  
  11.         }  
Click the play button to try it out.
 
Application Preferences Using Xamarin Essentials 
 
I hope you have understood how to use Application preferences Using Xamarin Essentials in Xamarin.Forms.
 
Thanks for reading. Please share comments and feedback.