GPS - Get Location

nuget : https://github.com/jamesmontemagno/GeolocatorPlugin

nuget : https://github.com/jamesmontemagno/PermissionsPlugin

在ProjectName.Android 設定 AndroidManifest.xml

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

在ProjectName 建立 XAML

目的:當按下 Button 開啟定位,並將座標與時間呈列Label

<StackLayout>
  <Label x:Name="labLocation" Text=""
                VerticalOptions="CenterAndExpand" 
                HorizontalOptions="CenterAndExpand" />
  <Button x:Name="btnLocation"  Text="start GPS" Clicked="getLocation_Clicked" ></Button>
</StackLayout>

在ProjectName XAML.cs

bool isListen = false;

private async void getLocation_Clicked(object sender, EventArgs e)
{
    if (isListen)
    {
        await StopListening();
        isListen = false;
        btnLocation.Text = "start GPS";
    }
    else
    {

        await StartListening();
        isListen = true;
        btnLocation.Text = "stop GPS";
    }
}

async Task StartListening()
{
  if (CrossGeolocator.Current.IsListening) return;

  await CrossGeolocator.Current.StartListeningAsync(TimeSpan.FromSeconds(10), 500, true);

  CrossGeolocator.Current.PositionChanged += PositionChanged;
  CrossGeolocator.Current.PositionError += PositionError;
}

private void PositionChanged(object sender, PositionEventArgs e)
{
  Device.BeginInvokeOnMainThread(() =>
  {
    var position = e.Position;
    labLocation.Text += $"{position.Timestamp.ToString("yyyy-MM-dd HH:mm:ss")} => {position.Latitude.ToString("F6")} {position.Longitude.ToString("F6")} \n";
  });
}

private void PositionError(object sender, PositionErrorEventArgs e)
{
    //Handle event here for errors
}

async Task StopListening()
{
    if (!CrossGeolocator.Current.IsListening) return;

    await CrossGeolocator.Current.StopListeningAsync();

    CrossGeolocator.Current.PositionChanged -= PositionChanged;
    CrossGeolocator.Current.PositionError -= PositionError;
}

results matching ""

    No results matching ""