Delphi 在 Android 上获取 LocationSensor 速度

Delphi Get LocationSensor Speed on Android

我目前正在 Delphi / RADStudio Tokyo 10.2

上开发本地化 Android 应用程序

我是 delphi 编程的新手,我正在寻找一种方法来获得 LocationSensor 的速度 属性。通过文档我发现了这个:

LocationSensor1.Sensor.Speed 

但它总是 returns NaN,所以我做了一些挖掘并在 System.Sensors 中找到了这个:

function TCustomLocationSensor.GetDoubleProperty(Prop: TProperty): Double;
begin
  Result := NaN;
end;

所以我很困惑,我是用错了属性,还是用错了?如果可以,我应该使用什么,或者我应该如何使用它?

编辑

我的问题与 Xe5 locationsensor distance doesn't work? 不同,因为我对 GPS 精度没有问题(或者至少看起来不是),尽管它们可能不是 unrelated.The 应用程序与服务器通信,这将在网络浏览器上显示它的位置和轨迹。

为了获得最佳使用效果,我必须传输设备的行进速度。一开始我想到了用Accelerometer,但是不适合这种情况。然后我在 embarcadero 文档中偶然发现了这个:http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.Sensors.TCustomLocationSensor.Speed

这正是我所需要的,但是当我尝试获取值时,它总是 returns NaN,如上所述。在调试时,我终于在 System.Sensors 中找到了上面显示的代码,我觉得很奇怪,无论发生什么情况,函数总是 returns NaN ,因为我在网上找不到帮助(只有几个日文网站或俄语 http://www.360doc.com/content/17/0502/18/9200790_650383719.shtml http://www.cyberforum.ru/delphi-beginners/thread1386722.html) 我发在这里了。

尽量不要使用标准的firemonkey TLocationSensor。而不是尝试基于本机 java 类 (JLocationListener).

实施解决方案
  TAndroidLocationListener = class(TJavaLocal, JLocationListener)
  public
    constructor Create();
    procedure onLocationChanged(location: JLocation); cdecl;
    procedure onProviderDisabled(provider: JString); cdecl;
    procedure onProviderEnabled(provider: JString); cdecl;
    procedure onStatusChanged(provider: JString; status: Integer; extras: JBundle); cdecl;
  end;

onLocationChanged(location: JLocation); cdecl;你会得到当前位置对象的实例(java接口)

出于测试目的,使用消息 location.getSpeed.ToString()

创建通知事件

这里你有类似的问题