Xamarin: проблема с прослушиванием в geoLocator в IOS - PullRequest
0 голосов
/ 19 ноября 2018

Я использую GeoLocator для текущего местоположения в xamarin.so, когда я начинаю слушать, он показывает мое текущее местоположение, но когда я делаю паузу и снова запускаю, тогда показывает lat = 0, long = 0 только в IOS. (В Andorid все работает нормально.) Это мой код:

public async void CurrentLocation()
{
    try
    {
        await 
    CrossGeolocator.Current.StartListeningAsync(TimeSpan.FromSeconds(10), 
    0, true, new Plugin.Geolocator.Abstractions.ListenerSettings
        {
            ActivityType = 
        Plugin.Geolocator.Abstractions.ActivityType.AutomotiveNavigation,
            AllowBackgroundUpdates = true,
            DeferLocationUpdates = true,
            DeferralDistanceMeters = 1,
            //DeferralTime = TimeSpan.FromSeconds(10),
            ListenForSignificantChanges = false,
            PauseLocationUpdatesAutomatically = false

        });
        CrossGeolocator.Current.PositionChanged += changedPosition;
    }
}

public void Start_button()
{
CurrentLocation();
}
public async void Pause_button()
{
 await CrossGeolocator.Current.StopListeningAsync();
}

, пожалуйста, помогите мне и заранее спасибо.

1 Ответ

0 голосов
/ 20 ноября 2018

В некоторых случаях вы можете установить плагин на платформу, которая еще не поддерживается. Это означает, что у вас будет доступ к интерфейсу, но реализация не существует. Вы можете сделать простую проверку перед вызовом любого API, чтобы проверить, поддерживается ли он на платформе, где выполняется код.

public bool IsLocationAvailable()
{
 if(!CrossGeolocator.IsSupported)
    return false;

 return CrossGeolocator.Current.IsGeolocationAvailable;
}

В iOS ваше приложение должно иметь ключи в вашем Info.plist для NSLocationWhenInUseUsageDescription для доступа к местоположению устройства.

<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs access to location when open.</string>

Фоновые обновления

Только реализуйте это и добавьте эти свойства, если вам нужны фоновые обновления для вашего приложения. Скорее всего, вы не будете. Добавление этого также напрямую влияет на разрешения и запросы для пользователя. Пожалуйста, будьте очень осторожны при добавлении этой информации.

Внутри вашего info.plist вы должны включить фоновые режимы / UIBackgroundModes для обновления местоположения. Вот полное руководство. Ваш info.plist должен содержать что-то вроде этого:

<key>UIBackgroundModes</key>
  <array>
    <string>location</string>
  </array>

В дополнение к NSLocationWhenInUseUsageDescription необходимо добавить NSLocationAlwaysAndWhenInUseUsageDescription ключи в файл Info.plist вашего приложения. (Если ваше приложение поддерживает iOS 10 и более ранние версии, ключ NSLocationAlwaysUsageDescription также требуется.) Если эти ключи отсутствуют, запросы на авторизацию немедленно завершаются неудачей.

<key>NSLocationAlwaysUsageDescription</key>
<string>This app needs access to location when in the background.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>This app needs access to location when open and in the background.</string>

Более подробно вы можете посмотреть Github demo

...