从 GPS 或网络提供商处获取速度

Posted

技术标签:

【中文标题】从 GPS 或网络提供商处获取速度【英文标题】:Getting Speed from GPS or Network Provider 【发布时间】:2014-07-22 04:44:03 【问题描述】:

我正在创建一个应用程序以从 GPS 和网络提供商处获取速度。我首先使用以下代码尝试基础知识:

LocationManager locationManager = (LocationManager) this .getSystemService(Context.LOCATION_SERVICE); 


    LocationListener locationListener = new LocationListener() 
    
        public void onLocationChanged(Location location) 
         

            //location.getLatitude(); 
            speedText.setText("Current speed:" + location.getSpeed());

         

        public void onStatusChanged(String provider, int status, Bundle extras) 
         

         

        public void onProviderEnabled(String provider) 
        

         

        public void onProviderDisabled(String provider) 
         

         
    ; 

    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);

//locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

具有 Manifext 权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

使用上面的代码,我总是只得到 0.0 作为值。 GPS 和网络都给出相同的值。我不确定我哪里出错了?有人可以帮我解决这个问题吗?

谢谢!

【问题讨论】:

为什么 -1 - 我认为这是一个真正的问题...... 【参考方案1】:

LocationManager 根据 GPS 卫星为您提供当前的纬度和经度。它使用locationManager.requestLocationUpdates() 根据指定的毫秒请求更新。现在,在得到你的纬度和经度后,你必须保持旧位置以及时间,然后你可以在获得下一个位置后根据行进的距离和时间来计算速度。您现在需要的是确保您了解它的实际工作原理,因为据我所知,您无法使用 locationManager 获得速度;只有位置。要了解有关 LocationManager 的更多信息,请参阅教程here

至于计算速度算法见here

【讨论】:

速度算法真的很糟糕,因为它没有考虑gps精度。如果你想得到一个好的值,你必须使用卡尔曼滤波器并使用精度作为输入。 我明白了。感谢您的有用评论。【参考方案2】:

您只能使用真正的 GPS 获取某些样本的速度,因此您必须使用 hasSpeed() 方法检查是否存在。在模拟器中你没有收到速度,所以你必须使用真实的手机。

【讨论】:

我用的是真机。我什至尝试记录: location.getLatitude() 获得数字后纬度没有改变?据我所知,即使是手机上的轻微移动,它也会自动改变 一般是等gps收到信号,到户外多走一会儿。你的代码很好。 只用gps试试,设置最短时间1秒,设置最短距离1米再试。它必须工作。您的位置监听器是否在服务或活动中? 那么你必须检查你的活动是否总是在前台进行测试 是的。我正在检查它,它总是在前台

以上是关于从 GPS 或网络提供商处获取速度的主要内容,如果未能解决你的问题,请参考以下文章

从 Fused Location Provider 获取 GPS 或网络提供商

设置 GPS 监听超时

安卓。如何知道检测到的位置是来自 GPS 还是网络提供商

如何从网络提供商处获取日期和时间?

从网络提供商处获取准确的当前位置

Kotlin - 从网络提供商获取位置的问题