Java Google Play服务中的LocationRequest未更新间隔设置为小于1秒。

Java Google Play服务中的LocationRequest未更新间隔设置为小于1秒。,java,android,gps,location,accelerometer,Java,Android,Gps,Location,Accelerometer,我正在开发一个android应用程序,在这个程序中,我需要以每秒30-40次的速度显示位置更新。 我正在使用Google I/O 2013中引入的。它使用融合定位提供商,利用加速计和其他传感器以及GPS进行更精确、更高效的定位跟踪 这是我的密码: protected void startLocationTracking() { if (GooglePlayServicesUtil.isGooglePlayServicesAvailable(this)) { mLocati

我正在开发一个android应用程序,在这个程序中,我需要以每秒30-40次的速度显示位置更新。 我正在使用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\u HIGH\u accurious,这里的时间间隔&最快的时间间隔为0毫秒。但我仍然只在每1秒收到一次更新

这看起来很像GPS传感器的更新频率 任何安卓手机。但我期待的更多,因为这是使用融合 传感器,包括加速计。加速度计是 融合传感器应该产生比这更高的频率

我尝试了间隔的其他值,但在少于1秒的间隔内无法获得更新。此外,ACCESS\u FINE\u位置用于清单中的权限


我是不是遗漏了什么?他们是否有其他方法来实现这一点?如果您能帮我解决这个问题,我将不胜感激。

事实上,您不能忽视硬件延迟。试着把一个浮球传给你的中场休息。在每次更新后杀死僵尸也可能有帮助。

事实上,存在一个硬件延迟,你不能忽视。试着把一个浮球传给你的中场休息。每次更新后杀死僵尸也会有所帮助。

我认为问题在于你设置了高精度的优先级。 高精度=GPS提供商

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


如果禁用“高精度”,它可能会起作用

我认为一个问题是你设置了高精度的优先级。 高精度=GPS提供商

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


如果禁用“高精度”,它可能会起作用

当前,更新速度不能超过每秒一次。这是硬件gps限制。网络位置在室内使用时稍微慢一点-目前大约每5秒一次。原始加速度计数据以更高的频率输入,但直接集成时往往非常嘈杂。这在将来可能会有所改善,但可能不会达到您所期望的高频率。

目前,您的更新速度无法超过每秒一次。这是硬件gps限制。网络位置在室内使用时稍微慢一点-目前大约每5秒一次。原始加速度计数据以更高的频率输入,但直接集成时往往非常嘈杂。这在将来可能会有所改善,但可能不会达到您所期望的高频率。

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

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

请用相同的更改在您的一侧尝试。

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

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

请尝试使用相同的更改。

setInterval方法只接受长值,因此我不能在此处传递浮点/双精度值。setInterval方法只接受长值,因此我不能在此处传递浮点/双精度值。根据文档,它说应用程序无法指定精确的位置源,例如GPS,LocationClient使用的。事实上,系统可能运行多个位置源提供程序,并可能将多个源的结果融合到单个位置对象中。其他选项包括优先级、平衡功率、精度和优先级、无功率。在前一种情况下,它有100米的精度,这对我来说太多了,而后者使应用程序被动侦听其他应用程序访问的位置。我被优先级高精度所困扰。根据文档,它说应用程序无法指定LocationClient使用的准确位置源,如GPS。事实上,系统可能运行多个位置源提供程序,并可能将多个源的结果融合到单个位置对象中。其他选项包括优先级、平衡功率、精度和优先级、无功率。在前一种情况下,它有100米的精确度,这对我来说太多了,而后者使应用程序被动侦听其他应用程序访问的位置。我被优先级高精确度所困扰。你是否尝试将其设置为小于1秒?你可以设置为小于1秒。我必须说的是,硬件GPS芯片组有其局限性,因此,如果我们将其设置为小于1秒,它可能不会提供数据。您是否尝试将其设置为小于1秒?您可以将其设置为小于1秒。我必须说的是,硬件GPS芯片组有其局限性,因此,如果我们设置的时间小于1秒,它可能无法提供数据。我无法每1秒获得onLocationChange方法调用。我已将Interval和Fast Interval都设置为0。但位置更新只需5秒。我每1秒更新一次位置。你能帮忙吗?你已经这么做了。@Scorpion你在l中设置了优先级了吗
定位请求作为优先级\u高\u精度?您在onConnected回调方法中引用了上述代码。是的,我做了与上述相同的事情。如果您想查看我的代码,请参考此链接@蝎子,在那里你能以超过5秒的速度获得更新?我的Nexus5每5秒才更新一次。我想知道是否我不应该使用新的融合位置提供商和谷歌播放服务,并切换回旧的位置提供商,在那里我可以指定只使用gps。旧的提供者会在某个时候被弃用吗?我的Nexus 6P每10秒更新一次…我不能每1秒调用一次onLocationChange方法。我已将Interval和Fast Interval都设置为0。但位置更新只需5秒。我每1秒更新一次位置。请您帮忙,因为您已经这样做了。@Scorpion您是否将locationRequest中的优先级设置为高精度优先级?您在onConnected回调方法中引用了上述代码。是的,我做了与上述相同的事情。如果您想查看我的代码,请参考此链接@蝎子,在那里你能以超过5秒的速度获得更新?我的Nexus5每5秒才更新一次。我想知道是否我不应该使用新的融合位置提供商和谷歌播放服务,并切换回旧的位置提供商,在那里我可以指定只使用gps。旧的提供者会在某个时候被弃用吗?我的Nexus 6P每10秒更新一次。。。