delphi xe6 调用java GPS的方法

如果用xe6自带的LocationSensor控件,默认优先使用网络位置,网络位置定位精度不准确,不能满足高精度定位的要求。但xe6自带的LocationSensor控件不能指定网络定位优先还是GPS定位优先,如果调用java API是可以指定优先使用GPS定位,以下代码经实测证实是可以直接指定GPS定位的。

uses Androidapi.JNI.Location, Androidapi.JNIBridge, Androidapi.JNI.JavaTypes,

Androidapi.JNI.Os,FMX.Helpers.Android,Androidapi.JNI.GraphicsContentViewText;

type

TLocationListener = class;

TForm1 = class(TForm)

. . . . . .

private

{ Private declarations }

FLocationManager : JLocationManager;

locationListener : TLocationListener;

public

destructor Destroy; override;

{ Public declarations }

procedure onLocationChanged(location: JLocation);

end;

//Sensore GPS

TLocationListener = class(TJavaLocal, JLocationListener)

private

[weak]

FParent : TForm1;

public

constructor Create(AParent : TForm1);

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;

. . . . .

constructor TLocationListener.Create(AParent: TForm1);

begin

inherited Create;

FParent := AParent;

end;

procedure TLocationListener.onLocationChanged(location: JLocation);

begin

FParent.onLocationChanged(location);

end;

procedure TLocationListener.onProviderDisabled(provider: JString);

begin

end;

procedure TLocationListener.onProviderEnabled(provider: JString);

begin

end;

procedure TLocationListener.onStatusChanged(provider: JString; status: Integer; extras: JBundle);

begin

end;

destructor TForm1.Destroy;

begin

if Assigned(locationListener) then

FLocationManager.removeUpdates(locationListener);

inherited;

end;

procedure TForm1.onLocationChanged(location: JLocation);//位置发生变化时,显示经、纬度

begin

if Assigned(location) then

begin

//variabili da recuperare dal sensore

Label4.Text := location.getLatitude.ToString;

Label5.Text := location.getLongitude.ToString;

Label6.Text := location.getAltitude.ToString;

Label8.Text := location.getSpeed.ToString;

Label10.Text := location.getTime.ToString;

end;

end;

procedure TForm1.FormCreate(Sender: TObject);

var LocationManagerService: JObject;

location : JLocation;

begin

if not Assigned(FLocationManager) then

begin

LocationManagerService := SharedActivityContext.getSystemService(TJContext.JavaClass.LOCATION_SERVICE);

FLocationManager := TJLocationManager.Wrap((LocationManagerService as ILocalObject).GetObjectID);

if not Assigned(locationListener) then locationListener := TLocationListener.Create(self);

FLocationManager.requestLocationUpdates(TJLocationManager.JavaClass.GPS_PROVIDER, 1000, 0, locationListener, TJLooper.JavaClass.getMainLooper);

// 监听状态       // 绑定监听,有4个参数       // 参数1,设备:有GPS_PROVIDER和NETWORK_PROVIDER两种       // 参数2,位置信息更新周期,单位毫秒       // 参数3,位置变化最小距离:当位置距离变化超过此值时,将更新位置信息       // 参数4,监听       // 备注:参数2和3,如果参数3不为0,则以参数3为准;参数3为0,则通过时间来定时更新;两者为0,则随时刷新       // 1秒更新一次,或最小位移变化超过1米更新一次;       // 注意:此处更新准确度非常低,推荐在service里面启动一个Thread,在run中sleep(10000);然后执行handler.sendMessage(),更新位置

end;

FLocationManager.isProviderEnabled(TJLocationManager.JavaClass.GPS_PROVIDER);

FLocationManager.isProviderEnabled(TJLocationManager.JavaClass.NETWORK_PROVIDER);

onLocationChanged(location);

end

时间: 2024-10-08 16:51:28

delphi xe6 调用java GPS的方法的相关文章

delphi xe6 调用java原生GPS的方法

如果用xe6自带的LocationSensor控件,默认优先使用网络位置,为了直接使用GPS位置,在网上搜到了以下代码,经实测证实是可用的. uses Androidapi.JNI.Location, Androidapi.JNIBridge, Androidapi.JNI.JavaTypes, Androidapi.JNI.Os,FMX.Helpers.Android,Androidapi.JNI.GraphicsContentViewText; type TLocationListener

世界上最恶心的调用方法:Delphi调用Java的class方法法

世界上最恶心的调用方法是,:用Delphi调用Java的class方法: 如果写了一个java方法: package com.api; public class DelphiCallJava { public static String dTest(String args,int args2,String args3){ if(args==null){ return "您沒有輸入參數."; }else { return "您輸入的參數是:"+args; } } }

.Net调用Java的实现方法

一. IKVM 1.1下载配置IKVM 1.1.1. 下载路径 http://www.ikvm.net/index.html 1.1.2. 设置路径 解压ikvm-0.42.0.3.zip,并将%IKVM_HOME%/bin添加到path中.此处的%IKVM_HOME%是指解压后ikvm的主目录. 1.2第一种方式:直接将.class文件转化成.dll 网站介绍 http://www.codeproject.com/Articles/13549/Using-Java-Classes-in-you

C#实现调用Java类中方法

基本思路: 用C#实现调用Java编写的类中的方法:重点是将Java编写的程序打包成Jar,然后使用开源工具IKVM将其转化成DLL控件,在.NET环境下调用. 分为以下步骤: 1.下载JDK6(注:JDK7下可能不支持,建议使用JDK6和Eclipse),进行安装,然后配置环境变量Path,将JDK安装的路径(例如:D:\Program Files\Java\jdk1.6.0_10\bin)添加到Path变量后面,如图所示: 用cmd打开DOS框,输入javac就可以查看是否配置成功,配置成功

.NET调用JAVA的WebService方法

原文:https://www.cnblogs.com/fengyao/archive/2010/06/14/1749383.html 调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,在网上也有相关资料,但是都整理的不够清晰明了.根据网上的资料,个人也对各种方法进行了尝试,费了不少精力,为此特将自己的解决方法进行总结一下,以备以后需要以及相关朋友参考. 先说说的思路:

UDF函数,hive调用java包简单方法

UDF函数,是hadoop在强大的大数据批量导入导出操作之余,为了满足复杂的数据逻辑操作留下的接口 核心思想:不管是UDF函数还是自定义处理jar包,都是要放置在hadoop服务器上的,相当于hadoop多出了一个自定义的处理数据的方法 1)其中调用的不管是参数还是数据库都是以hadoop本身的服务器环境路径为本地路径,而不是自己操作的java环境 2) 现在记录下2种近期使用过的简单方法,非常简单. 1.函数调用 1)导入UDF架包,保证引用UDF时不会编译报错 2)java中建任意类继承UD

Delphi调用Java类

1. Delphi XE7调用Java Class,JAR http://www.th7.cn/Program/delphi/201409/277888.shtml ZC: 文章中又提到:http://docwiki.embarcadero.com/RADStudio/XE7/en/Java2OP.exe,_the_Native_Bridge_File_Generator_for_Android 2. [源码分享] Delphi XE7调用JAVA的JAR http://www.dfwlt.co

java native interface JNI 调用Java方法

在上一篇文章中介绍了JNI,以及java调用JNI,这篇讲一下 JNI调用java方法. 通过使用合适的JNI函数,你可以创建Java对象,get.set 静态(static)和 实例(instance)的域,调用静态(static)和实例(instance)函数.JNI通过ID识别域和方法,一个域或方法的ID是任何处理域和方法的函数的必须参数. 下表列出了用以得到静态(static)和实例(instance)的域与方法的JNI函数.每个函数接受(作为参数)域或方法的类,它们的名称,符号和它们对

hessian 通信,C#客户端调用java服务端服务

Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能. 相比WebService,Hessian更简单.快捷.采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据(来自百度) 本次通过hessian简单实现C#调用java服务,并返回java方法的结果,其中C#以及java方法的参数可以是Entity. 1. 依赖 java包及DLL   1.1 hessian-4.0.37.jar   1.2 Hessiancsharp.d