Já falei por aqui sobre como podemos obter as mudanças de localização do usuário. Neste post vamos ver como solicitar que o usuário ative o sensor de GPS do smartphone para que o aplicativo consiga obter os dados de localização do usuário com sucesso.

Porque Solicitar?

Se você desenvolveu um aplicativo que captura latitude e longitude do smartphone para armazenar em algum local ou transmitir isso para alguma API, você provavelmente irá fazer uso do plugin GeoLocator, que falei neste post.

Neste plugin, é importante que o sensor de GPS do dispositivo esteja habilitado para que o plugin consiga capturar latitude e longitude com sucesso.

Cada plataforma funciona de uma forma e possui suas próprias especificidades. Então por conta disto, esta solicitação será realizada de acordo com cada plataforma, não sendo ela desenvolvidada no projeto PCL / .NetStandart

Solicitando a ativação no Android

A classe que gerência as funcionalidade de localização é a LocationManager da Android.Locations. Nela nós teremos acesso ao estado de alguns providers e para verificar se o GPS está ativo, vamos utilizar o provider GpsProvider 

Na plataforma Android, uma classe muito utilizada é a Intent. Um dos usos desta classe é abrir novas telas e funcionalidades dentro do sistema operacional. Aqui no exemplo, vamos criar uma nova Intent que é a tela de configuração de localização para que o usuário ative o GPS.

Para este exemplo, a chamada será realziado na MainActivity.cs no método OnCreate

protected override void OnCreate(Bundle bundle)
{
    TabLayoutResource = Resource.Layout.Tabbar;
    ToolbarResource = Resource.Layout.Toolbar;

    base.OnCreate(bundle);

    global::Xamarin.Forms.Forms.Init(this, bundle);

    LocationManager locationManager = (LocationManager)Forms.Context.GetSystemService(Context.LocationService);

    if (locationManager.IsProviderEnabled(LocationManager.GpsProvider) == false)
    {
        Android.App.AlertDialog.Builder dialog = new AlertDialog.Builder(this);
        AlertDialog alert = dialog.Create();
        alert.SetTitle("Meu App de localização");
        alert.SetMessage("Seu GPS não está ativado, por favor ative o GPS para continuar.");
        alert.SetButton("OK", (c, ev) =>
        {
            Intent gpsSettingIntent = new Intent(Android.Provider.Settings.ActionLocationSourceSettings);
            Forms.Context.StartActivity(gpsSettingIntent);
        });
        alert.Show();
    }

    LoadApplication(new App());
}

Solicitando a ativação no iOS

Na plataforma iOS a solicitação será feita na classe AppDelegate.cs no método FinishedLaunching após a iniciação do Forms e antes o método LoadApplication(new App()):

if (CLLocationManager.Status == CLAuthorizationStatus.Denied)
{
    if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0))
    {
        NSString settingsString = UIApplication.OpenSettingsUrlString;
        NSUrl url = new NSUrl(settingsString);
        UIApplication.SharedApplication.OpenUrl(url);
    }
}

Conclusão

Mesmo com o plugin de localização, a solicitação para funcionalidades especificas de cada plataforma deve ser feita no projeto da própria plataforma, pois é este projeto que saberá executar a requisição.

E aí, tudo certo, funcionou bem?

#Ubuntu

Imagem utilizada no post Pixabay

Modificado pela ultima vez: 15 de maio de 2020

Comentários

Escreva uma resposta ou comentário

Seu endereço de e-mail não será publicado.

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.