0

[これは2010年に尋ねられた質問と重複していることは承知していますが、その質問が実際に回答を得ることはありませんでした]

一部のWindowsPhoneアプリをAndroidに変換しています。アプリはすべて、動きの追跡を中心に展開しています。WP7では、ロケーションウォッチャーには「MovementThreshold」プロパティがあり、GPSが移動イベントをトリガーするために必要な移動量を設定します。通常、歩行時はしきい値を低くし、ジェット機の場合はしきい値を高くします。速度が変化した場合に動きを得るたびにそれを変更するこのようなコードでスロットルすることができます。

        if (mph < 7) watcher.MovementThreshold = 5;
            else if (mph < 15) watcher.MovementThreshold = 20;
            else if (mph < 30) watcher.MovementThreshold = 100;
            else if (mph < 50) watcher.MovementThreshold = 400;
            else if (mph < 100) watcher.MovementThreshold = 800;
            else if (mph < 120) watcher.MovementThreshold = 1200;
            else if (mph < 200) watcher.MovementThreshold = 2400;
            else if (mph < 400) watcher.MovementThreshold = 4800;
            else watcher.MovementThreshold = 9000;

現在、Androidバージョンのアプリでは、位置情報サービスの開始時に次の呼び出しを1回行います... locMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER、0、0、locLstnr);

その3番目のパラメーターはminDistance(現在はゼロに設定されています)であり、WP7のMovementThresholdと非常によく似ています。

私の最初の質問は次のとおりです。WP7アプリでMovementThresholdを調整するのと同じ方法で、AndroidアプリでminDistanceを調整できますか?私の2番目の質問は、どのような種類の呼び出しがスロートを行うのに最も効率的でしょうか?-上記のrequestLocationUpdates呼び出しを繰り返して、minDistanceパラメーターを変更しますか?ありがとう、ゲイリー

4

2 に答える 2

0

WP7 アプリで MovementThreshold を調整するのと同じ方法で、Android アプリで minDistance を調整できますか?

私見、そうではありません。速度はさまざまであるため、スロットリングを無効にするスロットリングを調整できるように、速度を決定するために継続的な GPS 修正が必要になります。特に、ジェット機が着陸するときは、最初にユーザーが徒歩 (または車) で数 km 移動するのを待っているため、それがわかるまでに時間がかかります。

もちろん、WP7でもそれが必要になるので、どうやってそれを実現しているのかわかりません.

個人的には、それを使用するのではなく、自分でフィルタリングしますminDistance

スロットリングを行うには、どのような呼び出しが最も効率的でしょうか? - minDistance パラメータを変更して、上記の requestLocationUpdates 呼び出しを繰り返しますか?

原則として、はい。ただし、ドキュメントを引用すると:

minDistance パラメーターを使用して、位置情報の更新頻度を制御することもできます。0 より大きい場合、ロケーション プロバイダーは、ロケーションが minDistance メートル以上変化し、かつ minTime ミリ秒以上経過した場合にのみ、アプリケーションに更新を送信します。ただし、ロケーション プロバイダーが minDistance パラメーターを使用して電力を節約することはより困難であるため、バッテリー寿命を節約するための主要なツールは minTime である必要があります。

(ここでのドキュメントのコメントはminTime、Android の新しいバージョンにのみ関連することに注意してください。Android 1.x/2.xminTimeはフィルターではなくヒントとして使用されます)

于 2012-12-14T20:29:40.970 に答える
0

最も効率的な方法は、時間に基づいて調整することです。ドキュメントは別の回答ですでに引用されていますが、距離のしきい値を計算する前に、デバイスが距離の測定値を取得してフィルタリングする必要があることは明らかですが、時間のしきい値を使用すると、デバイスは位置測定を回避できます。

ポーリングには一定の時間を使用することをお勧めします。したがって、更新を設定する必要があるのは 1 回だけです。この質問を自問してください -- 「私のアプリは、距離の変化 (任意の距離) をどのくらいの速さで知る必要がありますか?」単一の数字 (1 秒、100 秒など) を付けることができる場合は、それを更新時間として使用します。コールバック関数への余分な呼び出しを避けたい場合は、minDistance も使用できます。

しきい値はすでに「時間」になっていることに注意してください。速度(mph)を計算していて、距離のしきい値(メートル、WP7の「MovementThreshold」はメートル単位であるため、私は仮定します)を持っているので、しきい値内の距離を移動するのにかかる時間を簡単に計算できます(距離/デバイスが速度を変更しない限り、時間の前の測定値が距離のしきい値を超えてはならないことがわかっているため、その数値を minTime として使用します。これにより、探しているスライディング スケールが得られますが、より効率的な minTime が使用されます。

速度が変更された場合、新しい速度で最初の読み取りを取得するまで、ポーリング時間はオフになります。これらの変更を高解像度で検出することが重要である場合、おそらく距離ではなく時間に基づいてポーリングしているので、これは問題ではないと思います。

于 2012-12-15T02:02:36.550 に答える