我有一个Android应用程序,我正在建设与Xamarin移动(MonoDroid)。应用程序需要获取当前用户的gps坐标。不幸的是,我似乎无法使PositionChanged
事件触发。
private Geolocator geolocator = null;
private void InitializeStuff()
{
geolocator = new Geolocator(this) { DesiredAccuracy = 1 };
if (geolocator.IsGeolocationEnabled == false)
statusTextView.Text = "Please allow this application to access your location.";
else if (geolocator.IsGeolocationAvailable == false)
statusTextView.Text = "Your location could not be determined.";
else
statusTextView.Text = "Ready.";
geolocator.PositionChanged += geolocator_PositionChanged;
myButton.Click += myButton_Click;
}
private void myButton_Click(object sender, EventArgs e)
{
statusTextView.Text = "Getting position...";
if ((geolocator != null) && (geolocator.IsListening == true))
geolocator.StartListening(minTime: 1000, minDistance: 0);
}
private void geolocator_PositionChanged(object sender, PositionEventArgs e)
{
RunOnUiThread(() =>
{
statusTextView.Text = "Lat: " + e.Position.Latitude.ToString("N6") + ", Long: " + e.Position.Longitude.ToString("N6");
});
}
我可以成功地让我的应用程序到它说"获取位置…"的点。然而,PositionChanged
事件永远不会触发。我在Android模拟器中测试我的应用程序,因为我没有Android设备。我正在测试这个特性,方法是将其导入模拟器。然后,输入以下命令:
geo fix -73.985708 40
命令窗口显示"OK"。然而,PositionChanged
事件永远不会触发。我的模拟器是Android 2.2模拟器。感谢您提供的宝贵意见。
我怀疑您在if语句中的条件在myButton_Click
处理程序中是错误的:
if ((geolocator != null) && (geolocator.IsListening == true))
上面的意思是,如果地理定位器不是空的,它正在监听,那么你开始监听位置的变化。如果你把它改成:
if ((geolocator != null) && (geolocator.IsListening != true))
应该能正常工作。
编辑:你也不需要在你的两个条件周围加上括号可以这样写:
if (geolocator != null && geolocator.IsListening == true)