How to get device regional info in Xamarin Forms

Viewed 468

When I try to get regional info using RegionInfo.CurrentRegion I'm always getting "US". But my device region is different.

1 Answers

You can use dependency service to get region info from android project:

In Xamarin.forms:

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();

        IDeviceLocaleService service = DependencyService.Get<IDeviceLocaleService>();
        var region = service.getLocalRegion();
        Console.WriteLine(region);
    }
}

public interface IDeviceLocaleService {
    string getLocalRegion();
}

And in Android.project:

[assembly: Dependency(typeof(DeviceLocaleService))]
namespace App347.Droid
{
    public class DeviceLocaleService : IDeviceLocaleService
    {
        public string getLocalRegion()
        {
           var locale =  MainActivity.mainContext.Resources.Configuration.Locale;

            return locale.Country;
        }
    }
}

mainContext is a static property in MainActivity:

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{

    public static Context mainContext;
    protected override void OnCreate(Bundle savedInstanceState)
    {
        TabLayoutResource = Resource.Layout.Tabbar;
        ToolbarResource = Resource.Layout.Toolbar;

        base.OnCreate(savedInstanceState);

        mainContext = this.ApplicationContext;


        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
        LoadApplication(new App());
    }
    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);
    }
}
Related