参见英文答案 > Get GPS location via a service in Android                                    5个

我正在使用Emabarcadero Delphi XE 10 Seattle Update 1来创建一个Android服务,我发现这个教程Link并创建了一个服务应用程序,我想做的是使用Location Sensor每隔5秒获取一个当前位置并保存到数据库.我在我的主要表单上这样做但是当我关闭程序它停止时,所以我找不到任何关于如何同步我的应用程序和服务的文章.我试图将定时器和Locationsensor添加到服务表单但Delphi不允许我添加到服务表单任何对象,我想我需要发送命令服务或不知何故我需要连接服务和程序,我发现了一个示例这显示了如何使用服务下载图像,但对于像我这样的菜鸟来说它太专家了:)

解决方法:

看看this文章. Daniele Spinetti使用LocationSensor解决问题.

将System.Sensors和System.Android.Sensors单元放入您的项目并进行更改(Delphi 10 Seattle).

System.Sensors.pas

// about line 748

implementation

uses

System.Variants, System.Math, System.Character,

{$IFDEF ANDROID}

// -- patch

// include the modified System.Android.Sensors

System.Android.Sensors;

{$ENDIF ANDROID}

System.Android.Sensors.pas

//about line 12

uses

// -- patch

// use the modified System.Sensors

System.Sensors;

...

// about line 70

class constructor TPermission.Create;

var

PackageInfo: JPackageInfo;

PackageManager: JPackageManager;

Activity: JActivity;

LContext: JContext;

begin

// -- patch

// Activity := TJNativeActivity.Wrap

// (PANativeActivity(System.DelphiActivity)^.clazz)

LContext := TJContextWrapper.Wrap(System.JavaContext);

PackageManager := LContext.getPackageManager();

PackageInfo := PackageManager.getPackageInfo

(LContext.getApplicationContext.getPackageName,

TJPackageManager.JavaClass.GET_PERMISSIONS);

FPermissions := PackageInfo.requestedPermissions;

end;

...

// about line 100

type

TAndroidGeocoder = class(TGeocoder)

private type

TGeocoderRunnable = class(TJavaLocal, JRunnable)

private

FCoord: TLocationCoord2D;

FLGeocoder: JGeocoder;

public

constructor Create(ACoord: TLocationCoord2D; AGeocoder: JGeocoder);

procedure run; cdecl;

end;

private

class var

FGeocoder: JGeocoder;

// FActivity: JActivity; // -- patch

FActivity: JContextWrapper; // -- patch

...

// about line 130

TUIAndroidLocationSensor = class(TCustomLocationSensor)

private

FPermitted: Boolean;

// FActivity: JNativeActivity; // -- patch

FActivity: JContext; // -- patch

FLastValue: JLocation;

FLocationManager: JLocationManager;

FAccuracy: TLocationAccuracy;

...

// about line 1500

constructor TUIAndroidLocationSensor.Create(AManager: TSensorManager);

var

LocationService: JObject;

begin

inherited;

// FActivity := TJNativeActivity.Wrap

// (PANativeActivity(System.DelphiActivity)^.clazz); // -- patch

FActivity := TJContext.Wrap(System.JavaContext); // -- patch

LocationService := FActivity.getSystemService

(TJContext.JavaClass.LOCATION_SERVICE);

if Assigned(LocationService) then

FLocationManager := TJLocationManager.Wrap((LocationService as ILocalObject)

.GetObjectID);

end;

...

// about line 1530

function RunIfPossible(var ARunnable: TLocationRunnable;

var AListener: TLocationListener; AProviderName: JString): Boolean;

var

Provider: JLocationProvider;

LHandler: JHandler;

begin

Result := False;

if FLocationManager.isProviderEnabled(AProviderName) then

begin

if AListener = nil then

AListener := TLocationListener.Create(Self);

Provider := FLocationManager.getProvider(AProviderName);

if Provider <> nil then

begin

ARunnable := TLocationRunnable.Create(FLocationManager, AListener,

AProviderName);

// FActivity.runOnUiThread(ARunnable); // --patch

// -- patch

// You can use post method of Handler instead runOnUiThread in this case.

// more info here: http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html

LHandler := TJHandler.JavaClass.init;

LHandler.post(ARunnable);

Result := True;

end;

end;

end;

...

// about line 1730

class constructor TAndroidGeocoder.Create;

begin

// -- patch

// FActivity := TJNativeActivity.Wrap

// (PANativeActivity(System.DelphiActivity)^.clazz);

FActivity := TJContextWrapper.Wrap(System.JavaContext);

FGeocoder := TJGeocoder.JavaClass.init(FActivity);

end;

然后你可以像这样使用LocationSensor:

uses System.Sensors, System.Android.Sensors;

...

var

FSensors: TSensorArray;

Sensor: TCustomSensor;

begin

TSensorManager.Current.Active := true;

FSensors := TSensorManager.Current.GetSensorsByCategory(TSensorCategory.Location);

FSensor := nil;

for Sensor in FSensors do

begin

if TCustomLocationSensor(Sensor).SensorType = TLocationSensorType.GPS then

begin

FSensor := TCustomLocationSensor(Sensor);

Break;

end;

end;

if not Assigned(FSensor) then

Exit; { no location sensor is available }

{ start the sensor if it is not started }

if not FSensor.Started then

FSensor.Start;

标签:android,gps,service,delphi

来源: https://codeday.me/bug/20190702/1356762.html

delphixe android服务,delphi xe10 android服务gps [复制]相关推荐

  1. delphi android jni,Delphi使用android的NDK是通过JNI接口,封装好了,不用自己写本地代码,直接调用...

    一.Android平台编程方式: 1.基于Android SDK进行开发的第三方应用都必须使用Java语言(Android的SDK基于Java实现) 2.自从ndk r5发布以后,已经允许完全用C/C ...

  2. android 定位服务源码,android gps定位app源码(GpsTracker)

    [实例简介]做到了 gps 开启关闭后的提醒 以及地理位置记录(经纬度) [实例截图] [核心代码] package android.gpstracker; import android.app.Ac ...

  3. Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK

    原文:Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...

  4. 基于android平台的语音机器人服务娱乐系统

    分 类 号:TP311 学校代码:11460 学 号:10130920 本科生毕业论文 基于android平台的语音机器人服务娱乐系统 Robot Entertainment Service Syst ...

  5. android 学习随笔十七(服务 )

    1.Service 四大组件之一 运行于后台,没有前台界面的组件,用于运行需要在后台运行的代码 可以理解为没有前台的Activity 定义方式:创建java类继承Service,清单文件中注册该类 p ...

  6. android调服务不更新,android – OnUpdate()不调用小部件服务

    我正在为我的应用程序开发一个小部件.窗口小部件名称是历史记录,当用户浏览任何URL时,我将其存储在本地数据库中,从中列出该窗口小部件. 当我打开小部件时,它从本地数据库中获取所有细节并在小部件的列表视 ...

  7. 如何检查服务是否在Android上运行?

    如何检查后台服务是否正在运行? 我想要一个可切换服务状态的Android活动-它可以让我在关闭状态下将其打开,在开启状态下将其关闭. #1楼 这更适用于Intent Service调试,因为它们会生成 ...

  8. Android应用程序与SurfaceFlinger服务之间的共享UI元数据(SharedClient)的创建过程分析...

    在前面一篇文章中,我们分析了Android应用程序与SurfaceFlinger服务的连接过程.Android应用程序成功连接上SurfaceFlinger服务之后,还需要一块匿名共享内存来和Surf ...

  9. Android实现电蚊香/Service服务管理类

    实现这个实例需要的就是Service这个类的管理,我们用到的是启动Service,并在退出应用程序的时候关闭(Stop)Service,下面我们首先看下这个程序的运行截图: 图中显示的控件一个是Ima ...

  10. Android移动开发之【Android实战项目】后台服务Service

    桌面应用程序:可见 服务:不可见 长期在后台运行 帮助应用执行耗时的操作 安卓的服务:安卓四大组件之一 不可见 后台长期运行 界面与服务有时候要执行数据交互 文章目录 如何创建服务 创建一个类 继承S ...

最新文章

  1. Java内存模型终于能讲明白啦,建议收藏!
  2. JAVA日期加减运算
  3. Ext分区文件恢复工具extundelete
  4. 《统计学习方法》P89页IIS的中间步骤Zw+δ(X)/Zw(X)的推导
  5. java 获取活动窗口_用Java获取活动窗口信息
  6. js 中的console.log有什么作用
  7. MySQL存储过程的使用
  8. CentOS 挂载数据盘
  9. 手把手教你安装JDK免安装版(简单粗暴)
  10. 语义计算、知识图谱与智能问答(医药常识问答实例)
  11. android农历计算器,农历生日计算器,虚岁计算器
  12. 06 (补充)初始化sdram代码
  13. [组合] UOJ#308. 【UNR #2】UOJ拯救计划
  14. linux用命令下载图片,巧用linux命令做图片下载器
  15. Json字符串转JsonObject例子
  16. twitter如何以图搜图_中学智慧校园如何设计?可以看看这整套的校园CAD设计方案...
  17. 【转】手把手走入Git开源世界
  18. 小视频源码炙手可热的秘密,短视频行业先驱者们给我们留下启示
  19. 软件工程实训有必要吗_刚毕业出来的程序员,有必要免费实习吗?
  20. 分享一个电子发票信息提取工具(Python)

热门文章

  1. 哈工大2019计算机专业录取分数线,哈尔滨工业大学2019年高考分省分专业录取分数线...
  2. 为什么选择springcloud作为微服务架构
  3. 尚硅谷JVM笔记(宋红康主讲)
  4. Prometheus和Grafana监控实践
  5. vue的v-for循环普通数组、对象数组、对象、数字
  6. 【机器学习】Matlab中实现QQ-plot的一个好工具gqqplot
  7. [f]class获取元素函数
  8. 无缝向上滚动文字代码(Js+div),可用在公告栏
  9. 现代语音信号处理之语音信号处理基础
  10. linux读用户密码,linux用户/用户密码和用户组管理