java – Android GPS更新频率
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Android GPS更新频率,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3466字,纯文字阅读大概需要5分钟。
内容图文
![java – Android GPS更新频率](/upload/InfoBanner/zyjiaocheng/795/c16f5d3c09fe47b280ee5bd99c820ee7.jpg)
我正在写一个膝上计时应用程序,但遇到了GPS更新频率问题.当速度大于75km / h(21m / s)时,我的代码停止工作.我的问题是如何以更快的速度请求更新?我需要它以高达300公里/小时(83米/秒)的速度工作,并且希望应用程序每走几米就能获得更新,这意味着它需要每隔0.025秒(300公里/小时)更新一次.下面是我的代码,我尝试了一个替代代码来获取时间戳但得到相同的结果,我相信这是一个GPS更新频率问题而不是代码问题.如果手机通过切线上的接近半径,我希望每隔几米(300公里/小时)更新一次.
int prox = 30; // Proximity Switch To Finish Line = 30 meters
int speedGov = 0; // Speed In Kmh
public void OnProviderDisabled(string provider)
{
}
public void OnProviderEnabled(string provider)
{
}
public void OnStatusChanged(string provider, Availability status, Bundle extras)
{
}
protected override void OnResume()
{
this.InitializeLocationManager();
base.OnResume();
_locationManager.RequestLocationUpdates(_locationProvider, 0, 0, this);
}
void InitializeLocationManager()
{
_locationManager = (LocationManager)GetSystemService(LocationService);
Criteria criteriaForLocationService = new Criteria
{
Accuracy = Accuracy.Fine
};
IList<string> acceptableLocationProviders = _locationManager.GetProviders(criteriaForLocationService, true);
if (acceptableLocationProviders.Any())
{
_locationProvider = acceptableLocationProviders.First();
}
else
{
_locationProvider = String.Empty;
}
}
public void OnLocationChanged(Location location)
{
_currentLocation = location;
if (_currentLocation == null)
{
}
else
{
d2fl = Convert.ToInt32(_currentLocation.DistanceTo(fl));
speedGov = Convert.ToInt32(_currentLocation.Speed * 3.6);
}
}
int A = 0; // 1st Distance to Finish Line
int B = 1000000; // 2nd Distance to Finish Line
// Get Time Stamp
while (true)
{
A = d2fl;
if (A > B && d2fl < prox && speedGov > 2) // Travelling away from Finish Line & Within 30m proximity to Finish Line & Going faster than 2km/h
{
// Time stamp for when phone first starts travelling away from Finish Line
string hours = DateTime.Now.ToString("HH");
string minutes = DateTime.Now.ToString("mm");
string seconds = DateTime.Now.ToString("ss");
string milliseconds = DateTime.Now.ToString("fff");
lapFinishTimeStamp = (Convert.ToDecimal(hours) * 3600) + (Convert.ToDecimal(minutes) * 60) + Convert.ToDecimal(seconds) + (Convert.ToDecimal(milliseconds) / 1000);
A = 0;
B = 1000000;
break;
}
B = A;
}
// Alternate Get Time Stamp - worked the same as above "Get Time Stamp"
while (true)
{
int A = d2fl;
Thread.Sleep(5);
int B = d2fl;
if (A < B && d2fl < prox && speedGov > 2)
{
string hours = DateTime.Now.ToString("HH");
string minutes = DateTime.Now.ToString("mm");
string seconds = DateTime.Now.ToString("ss");
string milliseconds = DateTime.Now.ToString("fff");
lapFinishTimeStamp = (Convert.ToDecimal(hours) * 3600) + (Convert.ToDecimal(minutes) * 60) + Convert.ToDecimal(seconds) + (Convert.ToDecimal(milliseconds) / 1000);
A = 0;
B = 0;
break;
}
A = 0;
B = 0;
}
在这个论坛上看了一些其他的东西,但已经有几年了.此应用程序需要在Galaxy S4上开始工作.
另外我对GPS频率有点困惑,从我读到的GPS频率以相当高的速率运行(硬件大约1.6 GHz),但手机操作系统似乎将数据剔除到较低频率,这是故意的吗?
解决方法:
不要将射频值(1.1-1.6GHz)与获得位置更新(1Hz)的频率混淆.
您是否看过设备列表:Get GPS position on a precise time interval?虽然它有几年的历史,但我怀疑设备上的GPS会报告任何更快的速度(可能是由于电池/噪音/用例设计).即使车载设备报告的频率为10Hz或20Hz,仅为100ms或50ms,但仍低于25ms的要求.请记住,如果CPU正在与GPS通信并计算位置 – 它正在吃电池,这是移动设备的限制因素.
如果您想要一致的亚秒级GPS值更新,则需要使用外部设备.
内容总结
以上是互联网集市为您收集整理的java – Android GPS更新频率全部内容,希望文章能够帮你解决java – Android GPS更新频率所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。