0

私はWindows Mobileを大部分のターゲットとするWindows UWPアプリケーションを持っています。このアプリケーションは、ユーザーの歩行トラフィックと、定義されたジオフェンス内または外にあるときを監視します。私はその後、デバイスとの間で位置データを送信するためにSignalRを使用するWebバックエンドを持っています。ロック画面のために中断されてデバイスがスリープ状態になってもアプリケーションを実行させる方法

ロック画面で問題が発生しています。アプリが起動して動作しているが、ユーザーが端末をロックしているとか、タイムアウトの設定オプションが画面の有効期限をロックして端末がロックしたとします。あなたは力をつけてスワイプしてロックを解除し、アプリがまだ実行中であることを確認することができます。しかし、ロックされている間は、アプリが停止されていると仮定します。

まず、私は停止中に自分の位置情報の更新はどうなるのでしょうか?私はSignalRを介して私のハブに位置更新を送信するためにこれらを使用するだけでなく、彼らがジオフェンスの内外にあるかどうかをチェックします。私はロック画面が引き継いだと私のアプリが中断されたとき、私はもはや私のOnPositionChangedイベントを取得することを前提としていません

_geolocator = new Geolocator { ReportInterval = 0, DesiredAccuracyInMeters = 10, MovementThreshold = 4}; 

// Subscribe to PositionChanged event to get updated tracking positions 
_geolocator.PositionChanged += OnPositionChanged; 

// Subscribe to StatusChanged event to get updates of location status changes 
_geolocator.StatusChanged += OnStatusChanged; 

:私はこのような何かをやっていますか?アプリが中断されていたり、ロック画面がオンになっていても、あなたの位置を追跡するターンナビゲーションでターンするなど、これは他のものとどう対処していますか?

また、2番目の質問はSignalR接続とは何ですか?私は、アプリケーションが中断されていないときと同じようにOnPositionChangedイベントが発生したときに、私の位置情報更新をプッシュすることができるのが大好きです。それもできますか?

私はバックグラウンドタスクについて読んだことがありますが、これは15分間隔でしか実行されていないようです(誤解されていない限りこれは設定可能です)。私のアプリケーションでは、15分が長すぎます。私が望む最も多くのものは30秒または1分です。

ところで、はい、私はこのすべてがバッテリ寿命に深刻な影響を与えていることを理解しています。私はこのためにバッテリーの寿命に心配していないと仮定しましょう。

ありがとうございます!

+0

既にアプリが停止されているかどうかを確認するために何らかのテストを実行しましたか?ロックされた画面でアプリをテストすると、どのようなエラーが発生しましたか? – Alisson

+0

まあ、特にテストはありません。私はMSDNのドキュメントを読んでいますが、あなたのアプリがフォアグラウンドにない場合は、バックグラウンドタスクや何かのようなことを特別に行わない限り、バックグラウンドまたはサスペンドされています。 –

答えて

2

問題はロック画面にあります。アプリが起動して動作しているが、ユーザーが端末をロックしているとか、タイムアウトの設定オプションが画面の有効期限をロックして端末がロックしたとします。あなたは力をつけてスワイプしてロックを解除し、アプリがまだ実行中であることを確認することができます。しかし、ロックされている間は、アプリが停止されていると仮定します。あなた Windowsは、ユーザーがそれに切り替えるかどうかを確認するために、数秒間待機アプリを最小限に抑えることが

。この時間枠内に戻らず、拡張実行、バックグラウンドタスク、アクティビティスポンサード実行がアクティブでない場合、Windows suspendsアプリ。そのアプリケーションで拡張実行セッションなどが有効でない限り、ロック画面が表示されている場合にもアプリが停止されます。詳細についてはWindows 10 universal Windows platform (UWP) app lifecycleを参照してください。

私は、ロック画面が引き継がれ、私のアプリケーションが中断されたとき、私はもはや私のOnPositionChangedイベントを取得しないと思いますか?アプリが中断されていたり、ロック画面がオンになっていても、あなたの位置を追跡するターンナビゲーションでターンするなど、これは他のものとどう対処していますか?

ご希望の場合は、ExtendedExecutionReason.LocationTrackingで最小化してアプリを実行できます。たとえば、ナビゲーションを回してターンを実現するには、次のコードを参照してください。

あなたがExtendedExecutionSessionを作成するときにアプリが定期的GeoLocatorから場所をログに記録する必要がある場合ExtendedExecutionReason.LocationTracking指定します。定期的にユーザーの場所を監視する必要があるフィットネス追跡とナビゲーションのアプリで、この理由を使用する必要があります。

詳細についてはTrack the user's locationApp Lifecycle - Keep Apps Alive with Background Tasks and Extended Executionを参照してください。

private async void StartTbTNavigationSession() 
{ 
    using (var session = new ExtendedExecutionSession()) 
    { 
    session.Reason = ExtendedExecutionReason.LocationTracking; 
    session.Description = "Turn By Turn Navigation"; 
    session.Revoked += session_Revoked; 
    var result = await session.RequestExtensionAsync(); 
    if (result == ExtendedExecutionResult.Denied 
    { 
     ShowUserWarning("Background location tracking not available"); 
    } 
    // Do Navigation 
    var completionTime = await DoNavigationSessionAsync(session); 
    } 
} 
+0

非常に詳細で有益な回答をいただきありがとうございます! SignalR接続を同じように維持することはできますか? –

+0

はい。 1つのセッション中に接続を維持することができます。 –

関連する問題