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
Comentários