6

Geolocator オブジェクトで PositionChanged リスナーを設定しています

var geolocator = new Geolocator();
geolocator.PositionChanged += Geolocator_PositionChanged;

しばらくは問題なく動作します。しかし、ユーザーの操作なしでしばらくすると (+- 4 時間)、位置の変更の受信が停止します。これは、WP8 が単にそれを殺すためだと思います。これはおそらくmsから望まれていることですが、これは私のアプリモデルにとっては恐ろしいことです.

私が行ったことは、追加で PeriodicTask を設定し、位置も送信することです。これは問題なく実行されますが、ユーザーが位置を変更した場合、実際に追跡することはできません。

問題は、ユーザーの操作を必要とせずにこの Geolocator を起動する方法はあるのでしょうか? これは、PeriodicTask を介して行うことも、PositionChanged で行うこともできます。

PositionChanged デリゲート内に既に新しい Geolocator をインスタンス化しようとしましたが、これは機能しません。

どんな助けでも大歓迎です。ありがとうございました!

4

3 に答える 3

2

インスタンスを強制終了/無効にするある種のGCのようです。

使ってみてくださいgeolocator.addEventListener("statuschanged", onStatusChanged);

ステータスがWindows.Devices.Geolocation.PositionStatus.disabledまたはの場合、オブジェクトを再起動しますWindows.Devices.Geolocation.PositionStatus.notAvailable

Geolocator.StatusChangedを参照してください。詳細については、 statuschanged イベントを参照してください。

私が助けてくれることを願っています

于 2013-04-30T08:05:12.873 に答える
1

通話でタイムアウトを指定していますGetGeopositionAsyncか? この投稿の最後にあるコメントによると、このコードはGetGeopositionAsync呼び出しが返されなかった問題を修正します。関連している可能性があります。

public Task GetCurrentPosition()
{

    return Task.Run(() =>
    {
        if (_geolocator == null)
        {
           _geolocator = new Geolocator { DesiredAccuracy = PositionAccuracy.High };
        }

        Geoposition geoposition = null;

        ManualResetEvent syncEvent = new ManualResetEvent(initialState: false);

        IAsyncOperation asyncOp = _geolocator.GetGeopositionAsync();

        asyncOp.Completed += (asyncInfo, asyncStatus) =>
        {
           if (asyncStatus == AsyncStatus.Completed)
           {
               geoposition = asyncInfo.GetResults();
           }

           syncEvent.Set();

        };

        syncEvent.WaitOne();

        return geoposition.Coordinate;

    });

}
于 2013-05-06T00:57:01.297 に答える