我正在创建一个应用程序来提高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和网络都提供相同的价值。我不知道我哪里出错了?有人可以帮我解决这个问题吗?
谢谢!
答案 0 :(得分:0)
LocationManager根据GPS卫星为您提供当前的纬度和经度。它使用locationManager.requestLocationUpdates()
根据指定的millis请求更新。在获得你的纬度和经度后,你必须保持旧的位置以及时间,然后你可以根据行进的距离和获得速度的时间获得下一个位置后进行计算。你现在需要的是确保你理解它是如何工作的,因为据我所知你无法使用locationManager获得速度;只有位置。要了解有关LocationManager的更多信息,请参阅教程here
至于计算速度算法,请参阅here
答案 1 :(得分:0)
您只能使用真实GPS获取某些样本的速度,因此您必须使用hasSpeed()
方法检查状态。在模拟器中,您没有收到速度,因此您必须使用真正的手机。