我需要编写一个应用程序,每隔5分钟确定一次移动电话的当前位置(使用所有免费的可用位置提供商)并将其发送到服务器.

如果某个位置提供程序在应用程序启动时不起作用,但稍后可用,则应用程序也应处理其位置数据.

为了做到这一点,我实施了以下课程.在我的一个活动中,我创建了一个实例并调用其startTrackingUpdates方法. locationChangeHandler处理位置数据.

public class LocationTracker implements ILocationTracker, LocationListener {

public static final long MIN_TIME_BETWEEN_UPDATES = 1000 * 60 * 5; // 5 minutes

public static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters

private ILocationManager locationManager;

private ILocationChangeHandler locationChangeHandler;

public LocationTracker(final ILocationManager aLocationManager,

final ILocationChangeHandler aLocationChangeHandler) {

this.locationManager = aLocationManager;

this.locationChangeHandler = aLocationChangeHandler;

}

public void startTrackingUpdates() {

final List providers = locationManager.getAllProviders();

for (final String curProviderName : providers)

{

final ILocationProvider provider = locationManager.getLocationProvider(curProviderName);

if (!provider.hasMonetaryCost())

{

subscribeToLocationChanges(provider);

}

}

}

private void subscribeToLocationChanges(final ILocationProvider aProvider) {

locationManager.requestLocationUpdates(aProvider.getName(), MIN_TIME_BETWEEN_UPDATES,

(float)MIN_DISTANCE_CHANGE_FOR_UPDATES, this);

}

public void onLocationChanged(final Location aLocation) {

locationChangeHandler.processLocationChange(new LocationWrapper(aLocation));

}

public void onProviderDisabled(final String aProvider) {

}

public void onProviderEnabled(final String aProvider) {

}

public void onStatusChanged(final String aProvider, final int aStatus,

final Bundle aExtras) {

}

}

我构建了应用程序并将其安装在我的手机上.然后,早上我拿起手机,上班,然后回家.在家里,我检查了应用程序一天工作的结果,发现数据库中只有一条记录.

如果系统的其余部分(将位置数据传输到服务器,保存在数据库中)正常工作,我必须在位置跟踪代码中遇到一些问题(即使我多次更改了我的位置,也没有调用onLocationChanged).

我的代码有什么问题(我应该如何更改它,以便每当手机的位置根据其中一个locatin提供商的位置变化超过MIN_DISTANCE_CHANGE_FOR_UPDATES时,就会调用onLocationChanged)?

更新1(18.08.2013 13:59 MSK):

我根据msh建议改变了我的代码.我使用以下代码启动计时器:

public void startSavingGeoData() {

final IAlarmManager alarmManager = activity.getAlarmManager();

final IPendingIntent pendingIntent = activity.createPendingResult(

ALARM_ID, intentFactory.createEmptyIntent(), 0);

alarmManager.setRepeating(INTERVAL, pendingIntent);

}

在我放置以下计时器事件处理程序的活动中:

@Override

protected void onActivityResult(final int aRequestCode, final int aResultCode,

final Intent aData) {

geoDataSender.processOnActivityResult(aRequestCode, aResultCode,

new IntentWrapper(aData));

}

当手机开启时,一切都按预期工作 – onActivityResult在INTERVAL毫秒内执行一次.

但是当我按下电源按钮(屏幕变为禁用)时,根本不会调用onActivityResult.当我再次按下电源按钮时,onActivityResult会执行多次,因为自我关闭手机以来已经过了INTERVAL.如果我将手机关闭1 * INTERVAL毫秒,它将触发一次.如果我将手机关闭2 * INTERVAL毫秒,它将触发两次等.

注意:通过“关闭”,我的意思是短按电源按钮(例如,手机仍然“活着”并对传入的短信作出反应).

我应该如何修改startSavingGeoData的代码,以便在每个INTERVAL毫秒内执行onActivityResult方法,即使手机处于休眠状态?

更新2(18.08.2013 19:29 MSK):alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,0,INTERVAL,pendingIntent)和alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,INTERVAL,INTERVAL,pendingIntent)都没有解决问题.

android 跟踪方法调用,如何连续跟踪Android手机的位置?相关推荐

  1. android native方法调用

    adb devices连接设备 Android数据线要用好一点的线,有的劣质线只能充电,不能传输数据. 手机上找到系统版本,触摸5下打开开发者选项,打开usb调试,手机上确认连接fingerprint ...

  2. 利用Slf4j的MDC跟踪方法调用链

    2019独角兽企业重金招聘Python工程师标准>>> why? 一个web项目通常提供很多URL访问地址, 项目一般都是分层处理,例如Controller-->Service ...

  3. android封装全局调用的toast_【Android】Android中WebView实现Java与JS交互

    现在混合式开发是大趋势,H5不断蚕食移动互联网的份额,有的公司甚至只用H5就搞了一个APP,我们搞Android的不说会点H5,至少要懂怎么和H5(和JavaScript)交互,费话不多说. 一.先看 ...

  4. android+geturl+方法,浅入浅出Android(014):HTTP GET获取文本内容

    1.建立android项目MyApplication 2.修改布局文件activity_my.xml xmlns:tools="http://schemas.android.com/tool ...

  5. android利用反射调用截屏api,Android利用反射机制调用截屏方法和获取屏幕宽高的方法...

    想要在应用中进行截屏,可以直接调用 View 的 getDrawingCache 方法,但是这个方法截图的话是没有状态栏的,想要整屏截图就要自己来实现了. 还有一个方法可以调用系统隐藏的 screen ...

  6. android中方法调用super(..)的相关知识

    java中的多态有重写 方法被子类重写后 父类的原方法就会被隐藏 当你又需要调用父类所定义的原方法  这个时候就可以用super来调用 super调用指向了父类,在一些调用里可以很巧妙的利用,比如监听 ...

  7. Android 打印方法调用堆栈

    RuntimeException here = new RuntimeException("here");here.fillInStackTrace();Log.w("y ...

  8. android insert方法,史上最精炼android四大组件基础总结(忘记了的可以过一遍)

    Android基础知识总结 四大组件之一活动 活动状态 运行状态:活动处于栈顶 暂停状态:活动不处于栈顶,但仍然可见 停止状态:完全不可见 销毁状态:离开返回栈 生存期 onCreate() onSt ...

  9. Android当方法总数超过64K时(Android Studio)

    1. 问题描述 Error:The number of method references in a .dex file cannot exceed 64K. Error:Execution fail ...

最新文章

  1. ​阿里达摩院金榕:从技术到科学,中国 AI 将何去何从?
  2. 网络推广——网络推广专员在面对不同阶段网站优化各有妙计
  3. 自动化测试QTP知识框架
  4. priority_queue
  5. String和StringBuffer的区别,String长度是固定的?
  6. linux deploy 版本,Linux Deploy
  7. 控制器局域网can总线
  8. mysql维表的代理键字段_mysql多维数据仓库指南--第三篇第12章(2)
  9. c语言次幂如何表达_如何确保分布式场景下的并发幂等性?
  10. Python环境搭建之OpenCV(转载)
  11. html微软雅黑字体模糊,如何解决WinXP下微软雅黑字体不清晰的问题
  12. java 通过sftp服务器上传下载删除文件
  13. 史上最全idea插件开发入门实战(傻瓜式教程)
  14. 网站建设基本流程,要注意什么?
  15. 怎么通过Win pe下面注册表编辑器载入原来系统注册表更改信息
  16. Gmail打不开登录不了邮箱最新解决方法
  17. 顺丰java面试题_顺丰java开发面试分享,顺丰java面试经面试题
  18. ABAP: 循环加和查询
  19. 基金投资入门3:中外常见金融指数类型说明
  20. 年薪80万+年终奖汽车|显扬科技招聘三维机器视觉研发总监、高级三维算法工程师...

热门文章

  1. 西门子1200PLC程序SCL数控G代码功能块源文件 S7-1200PLC程序SCL数控G代码功能块源文件
  2. 软件产品化, 国内IT人之痛
  3. python画猪猪侠_猪猪侠简笔画怎么画
  4. evolution邮箱_b2evolution简介
  5. 基于springboot开发的停车场管理系统-计算机毕业设计
  6. 树选择排序(Tree Selection Sorting)介绍
  7. 黄山职业技术学院计算机专业怎么样啊,黄山职业技术学院怎么样
  8. 1月更新!EasyOps® 28+新功能“狂飙”上线~
  9. 【必看】高级网工面试题60例
  10. Android实现简单的网页跳转