Я использую Xamarin для создания приложения для Android, которое перечисляет несколько магазинов и сообщает вам, насколько они далеко.У меня уже работает в эмуляторе Android.Но когда я отлаживаю на своем физическом устройстве (Samsung Galaxy S5 / LineageOS 15.1 / Android 8.1.0), я не получаю обновления местоположения.Другие приложения, использующие данные о местоположении, работают нормально, например, Карты Google.
Приложение запрашивает разрешение, и я убедился, что действительно вызывается следующая функция, 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;
}
}
}