我目前正在使用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)我发布在这里。
答案 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