安卓GPS更新频率

安卓GPS更新频率

我正在编写一个圈速计时应用,但遇到了GPS更新频率问题。当速度超过75公里/小时(21米/秒)时,我的代码停止工作。我的问题是如何请求更快速的更新?我需要它在高达300公里/小时(83米/秒)的速度下工作,并希望该应用程序每行驶几米就获得一次更新,这意味着它需要每0.025秒获得一次更新@ 300km/h。以下是我的代码,我尝试了另一种获取时间戳的代码,但结果相同,我相信这是一个GPS更新频率问题而不是代码问题。我希望在手机通过切线接近半径时每行驶几米就能获得更新。

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 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),但手机操作系统似乎会将数据裁剪到较低的频率,这是故意的吗?

相关文章

365bet官网欧洲 拼多多商品收藏在哪?拼多多个人收藏在哪找
365bet官网欧洲 猫屎咖啡要怎么手冲 猫屎咖啡泡法详细教程技巧
bet体育365官网正规平台 办公环境

办公环境

⏱️ 07-02 👁️ 7161