Delphi在Android上获得LocationSensor Speed

时间:2017-12-06 11:08:51

标签: android delphi firemonkey

我目前正在使用Delphi / RADStudio Tokyo 10.2开发本地化Android应用程序

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

LocationSensor1.Sensor.Speed 

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

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

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

修改

我的问题与Xe5 locationsensor distance doesn't work?不同,因为我对GPS精度没有任何问题(或者至少看起来不是这样),尽管它们可能并不相关。应用程序与服务器进行通信,将显示它的位置及其在Web浏览器上的轨迹。

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

这正是我所需要的,但是当我试图获得该值时,它总是返回NaN,如上所述。在调试时,我终于在System.Sensors找到了上面显示的代码,我觉得奇怪的是,无论发生什么事情,函数总是返回NaN,因为我在网上找不到任何帮助(只有几个日文或俄文网站{{ 3}} http://www.360doc.com/content/17/0502/18/9200790_650383719.shtml)我发布在这里。

1 个答案:

答案 0 :(得分:0)

尽量不要使用标准的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()

创建通知事件

这里有类似的问题 How to track the user location at full time with a delphi app under android/ios