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;
}