デバイスが動いているときに特別にデバイスの位置を追跡するアプリケーションを開発しています。同じ 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 で機能する必要があります。