2

私は、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 はマニフェストのパーミッションに使用されます。

ここで何か不足していますか?これを達成するための他のアプローチはありますか?これを解決するための助けに感謝します。

4

4 に答える 4

3

現在、更新を 1 秒に 1 回より速く取得することはできません。これはハードウェアの GPS 制限です。ネットワークの場所は少し遅くなります (屋内で使用) - 現在、約 5 秒に 1 回です。生の加速度計データはより高い周波数で受信されますが、直接統合すると非常にノイズが多くなる傾向があります。これは将来的に改善される可能性がありますが、おそらくあなたが探している高頻度ではありません.

于 2013-05-29T02:36:57.030 に答える
-5

実際には、無視できないハードウェアの遅延があります。間隔にフロートを渡してみてください。各更新後にゾンビを倒すことも役立つ場合があります。

于 2013-05-23T12:18:05.033 に答える