Как отловить ошибки во время поиска GPS на WP7 - PullRequest
1 голос
/ 31 августа 2011

Я пытаюсь предупредить пользователя, когда GPS недоступен (в основном, когда у них отключены службы геолокации)

Ниже приведено мое заявление о поиске, и я заметил,что в эмуляторе я перешел в состояние "", поэтому я не мог вернуть ошибку здесь, поскольку она все еще работала, как ожидалось

    void MyStatusChanged(GeoPositionStatusChangedEventArgs e)
    {
        switch (e.Status)
        {
            case GeoPositionStatus.Disabled:
                client.ClientCallBackWithError("fail");
                break;
            case GeoPositionStatus.Initializing:
                var y = "initializing location service,";
                break;
            case GeoPositionStatus.NoData:
                // The location service is working, but it cannot get location data
                // Alert the user and enable the Stop Location button
                var z = "data unavailable,";
                break;
            case GeoPositionStatus.Ready:
                var zzz = "receiving data, ";
                break;

        }
    }

Так что внутри моей вызывающей страницы / представления я решил, что, возможно, я мог ждать 10секунд, чтобы увидеть, ударил ли он когда-нибудь или нет ... и если нет, я мог бы просто выдать ошибку / etc

предупреждение о большом взломе, поскольку я теряю надежду

    private void FindByGps_Click(object sender, RoutedEventArgs e)
    {
        gpsStarted = false;
        gpsEnded = false;

        progressHelper.StartProgressStuff(this.progress);
        gpsStarted = true;
        gpsLocationLookupService.StartLocationService();
        this.Dispatcher.BeginInvoke(() => ListenForCallbackDuringGpsLookup(0));
    }

    private object ListenForCallbackDuringGpsLookup(int counter)
    {
        if (gpsStarted && !gpsEnded && counter < 12)
        {
            //keep looking until the timer runs out ...
            counter = counter + 1;
            this.Dispatcher.BeginInvoke(() => SleepForASec());
            ListenForCallbackDuringGpsLookup(counter);
        }
        else if (gpsStarted && gpsEnded)
        {
            gpsStarted = false;
            gpsEnded = false;
        }else{
            this.Dispatcher.BeginInvoke(() => SetCurrentLocationAndLaunchFindKiosks(null, "Failed to locate you by GPS"));
        }

        return null;
    }

    private object SleepForASec()
    {
        Thread.Sleep(1000);

        return null;
    }

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

Так что мой вопрос - как СЛЕДУЕТ ловить этот тип ошибок GPS, чтобы обеспечить правильную обратную связь

1 Ответ

1 голос
/ 31 августа 2011

Вы смотрели на этот API?

http://msdn.microsoft.com/en-us/library/system.device.location.geocoordinatewatcher.trystart(v=VS.92).aspx

Исходя из того, что здесь сказано, вы должны быть в состоянии сделать что-то в следующих рамках:

public partial class MainPage : PhoneApplicationPage
{
    GeoCoordinateWatcher watcher;

    // Constructor
    public MainPage()
    {
        InitializeComponent();
        Loaded += (source, args) =>
        {
            watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);

            watcher.PositionChanged += (sender, e) =>
            {
                // update the user
            };

            watcher.StatusChanged += (sender, e) =>
            {
                // update the user
            };

            if (!watcher.TryStart(false, TimeSpan.FromSeconds(5)))
            {
                // show the error somewhere
            }
        };
    }
}

Затем, во время выполнения приложения, если что-то пойдет не так с GPS (потеря сигнала и т. Д.), Вы можете соответствующим образом отреагировать в обработчике событий StatusChanged.

Дайте мне знать, если я не в курсе, и я буду продолжать думать о лучших решениях ...

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