Xamarin Forms - Геозона с Shiny не срабатывает в геозоне - PullRequest
0 голосов
/ 16 марта 2020

Я создал приложение форм xamarin, и одно из требований заключается в следующем: пользователь должен иметь возможность нажать кнопку и создать геозону. Когда геозона создана, приложение постоянно проверяет, находится ли пользователь в геозоне. Это правда, мобильное приложение должно отображать уведомление sayinf: вы ввели геозону.

Я использую Shiny для реализации функции, основанной на этом уроке: "https://allancritchie.net/posts/shiny-geofencing".

Но проблема в том, что он ничего не делает. Я установил геозону в 50 метрах от моего дома, а радиус проверки - 200 метров, поэтому, когда я создаю приложение, через пару секунд / минут я должен получить уведомление, верно? Или мне нужно go сначала выйти из забора, а потом в? Как я могу решить эту проблему ...

мой код:

            // shiny doesn't usually manage your viewmodels, so we'll do this for now
        var geofences = ShinyHost.Resolve<IGeofenceManager>();
        var notifications = ShinyHost.Resolve<INotificationManager>();

        Register = new Command(async () =>
        {
            // this is really only required on iOS, but do it to be safe
            var access = await notifications.RequestAccess();
            if (access == AccessState.Available)
            {
                await geofences.StartMonitoring(new GeofenceRegion(
                    "CN Tower - Toronto, Canada",
                    new Position(52.079779, 4.337133),
                    Distance.FromMeters(200)
                )
                {
                    NotifyOnEntry = true,
                    NotifyOnExit = true,
                    SingleUse = false
                });
            }
        });



public class GeofenceDelegate : IGeofenceDelegate
{
    private readonly INotificationManager _notifications;

    public GeofenceDelegate(INotificationManager notifications)
    {
        _notifications = notifications;
    }

    public async Task OnStatusChanged(GeofenceState newStatus, GeofenceRegion region)
    {
        if (newStatus == GeofenceState.Entered)
        {
            await GeofenceEntered(region);
        }
        else if (newStatus == GeofenceState.Exited)
        {
            await GeofenceLeft(region);
        }
    }

}

У меня точно такой же код, что и в руководстве, и геозона создается, когда я нажимаю кнопку, если я отлаживаю Это. Так что все выглядит хорошо для меня ..

1 Ответ

0 голосов
/ 20 марта 2020

У меня была похожая проблема, и я предположил, что когда вы начинаете внутри забора, он не распознает вас как входящего или выходящего, поскольку вы уже находитесь внутри него.

Мне пришлось выйти из / в созданного забора, чтобы вызвать метод OnStatusChanged.

Важно отметить, что он не будет вводить метод, если мое приложение не активирует телефоны GPS-система (например, периодически повторяющий запрос текущей позиции), но я не уверен, вызвано ли это моим старым телефоном с задницей ( под управлением Android6.1 ) или это исправно.

Также обратите внимание, что я не использовал блестящие уведомления и просто показывал всплывающее окно при запуске метода (для целей тестирования), например:

public async Task OnStatusChanged(GeofenceState newStatus, GeofenceRegion region)
{
     await Application.Current.MainPage.DisplayAlert(newStatus.ToString(), $"{region.Identifier}", "Ok");
}

Надеюсь, это поможет;)

...