私は、1秒あたり30〜40回の更新で位置情報の更新を表示する必要があるAndroidアプリを開発しています。私は、Google I/O 2013 で導入されたGoogle Play Services の Location API を使用しています。これは、より正確で効率的な位置追跡のために、融合された位置プロバイダー (加速度計やその他のセンサーを GPS と共に使用する) を使用します。
これが私のコードです:
protected void startLocationTracking() {
if (GooglePlayServicesUtil.isGooglePlayServicesAvailable(this)) {
mLocationClient = new LocationClient(this, mConnectionCallbacks, mConnectionFailedListener);
mLocationClient.connect();
}
}
private ConnectionCallbacks mConnectionCallbacks = new ConnectionCallbacks() {
@Override
public void onDisconnected() {
}
@Override
public void onConnected(Bundle arg0) {
LocationRequest locationRequest = LocationRequest.create();
locationRequest.setFastestInterval(0);
locationRequest.setInterval(0).setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationClient.requestLocationUpdates(locationRequest, mLocationListener);
}
};
private OnConnectionFailedListener mConnectionFailedListener = new OnConnectionFailedListener() {
@Override
public void onConnectionFailed(ConnectionResult arg0) {
Log.e(TAG, "ConnectionFailed");
}
};
private LocationListener mLocationListener = new LocationListener() {
private long mLastEventTime = 0;
@Override
public void onLocationChanged(Location location) {
double delayBtnEvents = (System.nanoTime()- mLastEventTime )/(1000000000.0);
mLastEventTime = System.nanoTime();
//Sampling rate is the frequency at which updates are received
String samplingRate = (new DecimalFormat("0.0000").format(1/delayBtnEvents));
float speed = (float) (location.getSpeed() * 3.6); // Converting m/s to Km/hr
tv.setText(speed + " kmph" + ", " + samplingRate + " Hz"); //Updating UI
}
};
ここでは、優先度を PRIORITY_HIGH_ACCURACY に設定し、間隔と最速の間隔を 0 ミリ秒に設定しました。しかし、私はまだ1秒ごとにしか更新を受け取りません.
これは、Android スマートフォンの GPS センサーの更新頻度とほぼ同じです。しかし、これは Fusion Sensor (加速度計を含む) を使用しているため、もっと期待していました。融合センサーの一部である加速度計は、これよりも高い周波数を生成する必要があります。
間隔に他の値を試しましたが、1 秒未満の間隔で更新を取得できませんでした。また、ACCESS_FINE_LOCATION はマニフェストのパーミッションに使用されます。
ここで何か不足していますか?これを達成するための他のアプローチはありますか?これを解決するための助けに感謝します。