3

デバイスが動いているときに特別にデバイスの位置を追跡するアプリケーションを開発しています。同じ API 呼び出しに対して、OS バージョンが異なる Samsung と HTC デバイスで異なる応答が得られます。

これが私のコードです。

private static final long HUNDERE_METERS = 100; // in Meters
private static final long TWO_MIN = 60000*2; // in Milliseconds

Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setBearingRequired(true);
criteria.setBearingAccuracy(Criteria.ACCURACY_HIGH);
criteria.setHorizontalAccuracy(Criteria.ACCURACY_HIGH);
String provider = mlocManager.getBestProvider(criteria, false);
mlocManager.requestLocationUpdates(provider, TWO_MIN, HUNDERE_METERS, mlocListener);

「Samsung Galaxy Nexus-4.1.1」は、移動距離が HUNDRED_METERS (100 メートル) ごとに位置情報を更新します。これは問題ありません。しかし、「HTC EVO 3D PG86100-4.0.3」では、GPS が 2 分間使用できなくなり、その後使用可能になるため、2 分ごとに位置情報が更新されます。

以下のようにコードを修正しました

mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, TWO_MIN, HUNDERE_METERS, mlocListener);

現在、HTC は正常に動作し始め、100 メートル移動する距離ごとに位置情報を提供しますが、Samsung GPS では 2 分ごとに利用できなくなります。

requestLocationUpdates を呼び出す必要がある引数を指定して、目的の距離だけ移動した距離の位置情報の更新を取得する必要があります。これは、すべての Android デバイスと OS で機能する必要があります。

4

1 に答える 1

0

Android 4.1 Jelly Bean より前は、Android Location API 仕様によると、minTime パラメーターと minDistance パラメーターは、アプリがエネルギーを節約したいというデバイスへの単なる「ヒント」でした。

OEM は実際にこれを実装することができましたが、その結果、さまざまな Android デバイスで一貫性のない動作が発生しました。そのため、Android 4.1 より前では、同じ minTime パラメーターと minDistance パラメーターを使用すると、さまざまなデバイスでさまざまな動作が見られます。

この一貫性のない動作には、minTime パラメータが完全に無視されるさまざまなデバイスに影響を与えるバグが含まれています。詳細については、Android チームとの会話をご覧ください。

https://android-review.googlesource.com/#/c/34230/

Android 4.1 以降では、Location API 仕様が強化され、追加の CtsVerifier テストが追加されて、Android デバイス間でより一貫した動作が適用されます。

Android 4.1 以降で予想される動作は次のとおりです。

「更新間隔は、minTime パラメーターを使用して制御できます。場所プロバイダーの実装と他のアプリケーションによって要求された更新間隔によっては、それよりも長くなる可能性がありますが、場所の更新間の経過時間は minTime よりも短くなることはありません。

...

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

...

Jellybean より前は、minTime パラメーターは単なるヒントであり、一部のロケーション プロバイダーの実装では無視されていました。Jellybean 以降では、Android 互換デバイスで minTime パラメーターと minDistance パラメーターの両方を監視することが必須です。"

から: http://developer.android.com/reference/android/location/LocationManager.html#requestLocationUpdates(java.lang.String,long,float,android.location.LocationListener )

于 2012-10-16T04:50:33.987 に答える