In this blog, you will learn how to get full address using Latitude and Longitude Using Xamarin.Essentials in Xamarin forms.
Introduction
Xamarin.Forms code runs on multiple platforms - each of which has its own filesystem. This means that reading and writing files is 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
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 application that can be accessed from shared code. When we are developing Xamarin with Android, iOS and UWP apps but now Xamarin.Essentials overcome the problem, developers can access every native platform API using C#. This plugin provides many APIs so initially, there is no need of more plugins for Xamarin. Xamarin.Essentials plugin impacts your app's minimum size.
Platform Support
Xamarin.Essentials supports 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
Prerequisites
- Visual Studio 2017(Windows or Mac)
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.
Name your app, select “Use Portable Class Library” for shared code, and target both Android and iOS.
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.
You now have a basic Xamarin.Forms app. Click the play button to try it out.
Setting up the User Interface
Go to MainPage.Xaml and write the following code.
MainPage.xaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8" ?> | |
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" | |
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" | |
xmlns:local="clr-namespace:XamarinEssentials" | |
x:Class="XamarinEssentials.MainPage"> | |
<StackLayout> | |
<StackLayout HorizontalOptions="Center" VerticalOptions="Start"> | |
<Image Margin="0,50,0,0" x:Name="imgBanner" Source="banner.png" ></Image> | |
<Image Margin="0,0,0,10" x:Name="imgXamarinEssential" Source="xamarinessential.png" ></Image> | |
<Label Margin="0,0,0,10" Text="Geocoding" FontAttributes="Bold" FontSize="Large" TextColor="#CA6F1E" HorizontalTextAlignment="Center" ></Label> | |
<Entry x:Name="txtAddress" Placeholder="Search Location..."></Entry> | |
<Button x:Name="btnLocation" Text="Get Location" Clicked="btnLocation_Clicked"/> | |
<Label HorizontalTextAlignment="Center" x:Name="lblAdminArea"></Label> | |
<Label HorizontalTextAlignment="Center" x:Name="lblCountryName"></Label> | |
<Label HorizontalTextAlignment="Center" x:Name="lblCountryCode"></Label> | |
<Label HorizontalTextAlignment="Center" x:Name="lblLocality"></Label> | |
<Label HorizontalTextAlignment="Center" x:Name="lblSubAdminArea"></Label> | |
<Label HorizontalTextAlignment="Center" x:Name="lblSublocality"></Label> | |
<Label HorizontalTextAlignment="Center" x:Name="lblPostalcode"></Label> | |
</StackLayout> | |
</StackLayout> | |
</ContentPage> |
Click the play button to try it out.
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).
Xamarin.Essentials requires platform-specific setup
Android
The following steps are necessary for Android.
- Xamarin.Essentials supports a minimum Android version of 4.4
- Target Android version for compiling must be 8.1, API level 27.
MainActivity.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Xamarin.Essentials.Platform.Init(this, bundle); |
MainActivity.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults) | |
{ | |
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults); | |
base.OnRequestPermissionsResult(requestCode, permissions, grantResults); | |
} |
No additional setup required.
UWP
No additional setup required.
Permissions - Android
AndroidManifest.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> | |
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> | |
<uses-feature android:name="android.hardware.location" android:required="false" /> | |
<uses-feature android:name="android.hardware.location.gps" android:required="false" /> | |
<uses-feature android:name="android.hardware.location.network" android:required="false" /> |
- Privacy - Location When In Use Usage Description
MainPage.xaml.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using Xamarin.Forms; | |
using Xamarin.Essentials; | |
namespace XamarinEssentials | |
{ | |
public partial class MainPage : ContentPage | |
{ | |
public MainPage() | |
{ | |
InitializeComponent(); | |
} | |
protected override void OnAppearing() | |
{ | |
base.OnAppearing(); | |
} | |
async void btnLocation_Clicked(object sender, System.EventArgs e) | |
{ | |
try | |
{ | |
string address = txtAddress.Text; | |
if(!string.IsNullOrEmpty(address)) | |
{ | |
var locations = await Geocoding.GetLocationsAsync(address); | |
var location = locations?.FirstOrDefault(); | |
if (location != null) | |
{ | |
var placemarks = await Geocoding.GetPlacemarksAsync(location.Latitude, location.Longitude); | |
var placemark = placemarks?.FirstOrDefault(); | |
if (placemark != null) | |
{ | |
lblAdminArea.Text = "Admin Area: " + placemark.AdminArea; | |
lblCountryName.Text = "Country Name:" + placemark.CountryName; | |
lblCountryCode.Text = "Country Code:" + placemark.CountryCode; | |
lblLocality.Text = "Locality:" + placemark.Locality; | |
lblSubAdminArea.Text = "SubAdmin Area:" + placemark.SubAdminArea; | |
lblSublocality.Text = "SubLocality:" + placemark.SubLocality; | |
lblPostalcode.Text = "PostalCode:" + placemark.PostalCode; | |
} | |
} | |
} | |
} | |
catch (FeatureNotSupportedException fnsEx) | |
{ | |
await DisplayAlert("Faild", fnsEx.Message, "OK"); | |
} | |
catch (PermissionException pEx) | |
{ | |
await DisplayAlert("Faild", pEx.Message, "OK"); | |
} | |
catch (Exception ex) | |
{ | |
await DisplayAlert("Faild", ex.Message, "OK"); | |
} | |
} | |
} | |
} |
I hope you have understood how to get full address using Latitude and Longitude Using Xamarin Essentials in Xamarin.Forms.
Thanks for reading. Please share comments and feedback.
Thanks for sharing this informative content , Great work
ReplyDeleteLeanpitch provides online training in Scrum Master during this lockdown period everyone can use it wisely.
CSM certification online
Thanks for sharing this informative content , Great work
ReplyDeleteLeanpitch provides online training in Advanced Scrum Master during this lockdown period everyone can use it wisely.
Advanced Scrum Master Training Online
More valuable post!!! Waiting for the further data regarding this post.
ReplyDeleteContent Writing Course in Chennai
Online Content Writing Course
Thanks for this blog keep sharing your thoughts like this...
ReplyDeleteReact JS Training in Chennai
Reat JS Online Course