2

我正在开发一个 android 应用程序,我需要在其中显示位置更新,每秒大约 30-40 次更新。我正在使用Google Play Services 的 Location API,在 Google I/O 2013 中引入。它使用融合的位置提供程序(利用加速度计和其他传感器以及 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 传感器的更新频率。但我期待更多,因为这是使用融合传感器(包括加速度计)。作为聚变传感器的一部分的加速度计应该产生比这更高的频率。

我尝试了其他间隔值,但在不到 1 秒的间隔内无法获得更新。ACCESS_FINE_LOCATION 也用于清单中的权限。

我在这里错过了什么吗?他们还有其他方法可以做到这一点吗?对于解决此问题的任何帮助,我将不胜感激。

4

4 回答 4

3

目前,您无法以每秒一次的速度获得更新。这是硬件 gps 限制。网络位置有点慢(在室内使用) - 目前大约每 5 秒一次。原始加速度计数据以更高的频率出现,但直接集成时往往会非常嘈杂。这可能会在未来有所改善,但可能不会以您正在寻找的高频率出现。

于 2013-05-29T02:36:57.030 回答
1

我正在尝试使用以下参数进行更改,并且无论我设置什么,它都对我有用。

locationRequest.setFastestInterval(10000); // Every 10 sec it gives lat/lng

请尝试在您身边进行相同的更改。

于 2013-07-30T05:32:52.477 回答
0

我认为一个问题是你设置了PRIORITY_HIGH_ACCURACY。High_accuracy = GPS 提供商

手机中的 Gps 芯片组通常只有 ~1Hz 的更新率。

如果您禁用 HighAccuracy,它可能会起作用。

于 2013-05-24T07:50:15.100 回答
-5

事实是存在您不能忽视的硬​​件延迟。尝试将浮点数传递给您的区间。每次更新后杀死僵尸也可能有所帮助。

于 2013-05-23T12:18:05.033 回答