我正在使用Xamarin构建一个Android应用,该应用列出了许多商店,并告诉您它们有多远。我已经可以在Android模拟器中使用它了。但是,当我在物理设备(三星Galaxy S5 / LineageOS 15.1 / Android 8.1.0)上调试时,似乎没有收到位置更新。其他使用位置数据的应用程序也可以正常工作,例如Google Maps。
该应用程序请求许可,并且我确保确实调用了以下功能StartRequestingLocationData()
。
但是,当应用程序在物理设备上运行时,OnLocationChanged(Location location)
永远不会被调用。在仿真器中,一切正常,它可以在启动时立即给出位置,并在输入新位置数据时不断更新。
我很乐意提供错误消息或以某种方式更彻底地讲授,但是我看不出任何有关其原因的线索。例如,我在输出中看不到任何错误或警告。
这是我的第一个Android应用程序(尽管我在许多其他平台上都有经验),所以我很可能会丢失一些对其他人显而易见的东西。我的问题是我不知道该在哪里寻找线索,并且在线搜索也无法解决这个问题。
这是相关的代码。预先感谢。
public void StartRequestingLocationData()
{
this.location_manager = (LocationManager)GetSystemService(Context.LocationService);
Criteria crit = new Criteria();
crit.Accuracy = Accuracy.Fine;
crit.AltitudeRequired = false;
crit.BearingRequired = false;
crit.SpeedRequired = false;
// Both the emulator and physical device report this as "gps".
string provider = this.location_manager.GetBestProvider(crit, true);
this.location_manager.RequestLocationUpdates(provider, 1, 1, this);
Location last_location = this.location_manager.GetLastKnownLocation(provider);
if (last_location != null)
{
this.OnLocationChanged(last_location);
}
}
public void OnLocationChanged(Location location)
{
foreach (Replenisher store in this.stores)
{
if (store.DistanceView != null)
{
LatLng store_loc = new LatLng(double.Parse(store.GPSN), double.Parse(store.GPSW));
LatLng our_loc = new LatLng(location.Latitude, location.Longitude);
double distance = Meters.ComputeDistanceBetween(our_loc, store_loc);
store.DistanceView.Text = GetString(
Resource.String.kilometers_away,
distance / 1000
);
store.DistanceView.Visibility = ViewStates.Visible;
}
}
}