android动态获取gps信息后本地文件保存问题总结

本文总结了在Android项目中如何动态获取GPS信息并保存到本地文件时遇到的问题,包括GPS服务启动、定时任务执行、界面更新与数据保存的同步,以及解决GPS数据不连续的问题。通过使用LocationManager、LocationListener和GpsStatus监听器,解决了GPS数据获取和界面刷新的冲突。针对AlarmManager在API 19后的精度问题,建议使用setWindow或setExact方法,或切换到Timer来实现定时任务。同时,通过分离数据处理、界面刷新和文件写入的逻辑,确保服务不被系统优化杀死,提高了GPS数据的连续性和准确性。
摘要由CSDN通过智能技术生成

一、

针对android项目中加速度传感检测手机方位,运行过程会时刻记录手机GPSSRN详细数据,实时显示当前获取的卫星的PIDC/N,实时显示手机终端系统时间的需求,对于启动后台服务采集gps数据同时要把数据实时保存到本地文件中,要在gps状态改变时更新gps信息到界面上显示并且记录下来保存到本地的实时性冲突,对频繁读写文件还有界面更新不能让数据出现时间不连续。

GPS项目的初始代码中逐步发现无法进行定时器更新执行,对界面显示数据的分离问题还有获取卫星列表失败、数据保存不连续等问题,造成获取gps信息不正常。

二、

在定时器无法更新执行任务的问题中原来代码使用AlarmManager服务,但是在设定重复任务的时候发现设定好了interval时间后,任务并没有按期望启动。从API 19开始,alarm的机制都是非准确传递,操作系统将会转换闹钟,来最小化唤醒和电池使用。有一些新的API会支持严格准确的传递,见setWindow(int, long, long, PendingIntent)setExact(int, long, PendingIntent)targetSdkVersionAPI 19之前应用仍将继续使用以前的行为,所有的闹钟在要求准确传递的情况下都会准确传递。setRepeating方法在 API 19开始将会失去原来的效果。可以换个定时器timer来使用重复执行任务,或者重复执行循环定时AlarmManager的设置。对于界面中时间显示和gps数据更新不在一个流程下,可以进行模块分离,单独更新对应控件显示获取卫星列表信息失败,没有从gps状态监听器中获取,造成数据获取异常。需要在GpsStatus监听器的onGpsStatusChanged回调函数中的当卫星状态改变时来获取gps信息。获取gps信噪比数据不连续是因为服务被系统优化给杀死了,得保证采集数据的服务常驻不被系统停止。

三、

GPSAndroid系统中重要的组成部分,通过它可以衍生出众多的与位置相关的应用。AndroidGPS有一个专门的管理类,称为LocationManager,所有的GPS定位服务都由其对象产生并进行控制。首先需要明确的是,LocationManager类的对象获取并不是直接创建的,而是由系统提供的,具体来说,通过如下方法,为一个LocationManager对象建立一个对象引用:

 

LocationManager  locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

至此,我们可以用locationManager这个对象对任意有关GPS的功能进行操作了。下表列出了几个常用的成员方法:getAllProviders获取所有与设备关联的定位模块的列表;getBestProvider获取设定的标准(Criteria对象)中最适合的一个设备;getGpsStatus获取GPS当前状态;getLastKnownLocation获取最近一次的可用地点信息;isProviderEnabled判断参数所提及的设备是否可用。

GPS还有一个支持API,即Location,它的作用是一个代表位置信息的抽象类,用它可以获取所有的位置数据。我们可以用以上的方法开始进行定位,可以将地点信息传递给一个Location对象:

 

Locationlocation = locationManager.getLastKnownLocation (LocationManager.GPS_PROVIDER);

我们还可以调用以下函数,对每次更新的位置信息进行我们想要的操作:

 

locationManager.requestLocationUpdates (LocationManager.GPS_PROVIDER,1000, 10, new LocationListener())

其中,第一个参数是LocationProvider对象,第二个参数是刷新的时间差,这里设定为1秒,第三个参数是位置差,这里设定为10米,第四个参数为一个位置监听器对象,可以重写这些方法来实现我们的需求。

大致流程就是首先通过LocationMangager位置管理器,要想操作定位相关设备,必须先定义个LocationManager。可以通过如下代码创建LocationManger对象。然后通过LocationListener位置监听器,可以监听位置变化,监听设备开关与状态。Location位置信息,通过Location可以获取时间、经纬度、海拔等位置信息。采用

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值