当前位置: 首页 > 知识库问答 >
问题:

android后台位置更新和wakelock

徐皓君
2023-03-14

我正在开发一个android应用程序,我需要在后台使用GPS提供商获得更长时间的位置更新,所以当用户不再与它交互时,我需要位置更新。我自己做了一些测试,比较LocationManager的requestSingleUpdate(provider,pendingIntent版本)和requestLocationUpdates(provider,minTime,minDistance,intent版本)。在我的Droid Razr HD上获取了大量数据后,使用requestLocationUpdates看起来比requestSingleUpdate更加可靠(对于这两种方法,我实际上将报告的GPS位置与我实际所在的位置进行了比较,即不使用报告的精度,requestLocationUpdates不仅对我的实际位置更加准确,而且它返回的位置固定时间与当前时间相同,比使用requestSingleUpdate选项要频繁得多)。我知道如何使用带有重复警报的AlarmManager并调用requestSingleUpdate,这样每次警报响起时我只需要保持一个wakelock,但是由于使用requestLocationUpdates的准确性提高了(至少在我的手机测试中是这样),我希望使用该方法。我的问题是,如果我使用requestLocationUpdates方法,我真的不清楚如何在用户不与手机交互时保持wakelock来保持更新。我从一个从服务启动的单独线程调用requestLocationUpdates(我读到这是标准模式)。我的问题是,我是否必须持有一个wakelock为整个时间,我想要位置更新不断?如果我没有自己的位置更新,是否会不断更新,每次更新都要唤醒手机?如果这是真的,这些更新是否创建了自己的wakelock,如果是,他们什么时候发布wakelock?在这个问题上我似乎找不到明确的答案。非常感谢任何帮助。

共有1个答案

齐凯康
2023-03-14

不,您不需要wakelock,因为操作系统为您(代码)接收wakelock。当onlocationchange()结束或广播接收器接收到意图(对于接口的意图版本)时,wakelock将被释放。如果在onlocationchange()中启动一些异步工作,例如,使用其他线程,则需要自己的wakelock。

 类似资料:
  • 我正在编写一个应用程序,需要高精度和低频率的背景位置更新。解决方案似乎是一个后台NSTimer任务,它启动location manager的更新,然后立即关闭。这个问题以前有人问过: 如何在iOS应用程序中每n分钟更新一次后台位置? 在应用程序进入后台后每n分钟获取一次用户位置 iOS不是典型的后台位置跟踪计时器问题 iOS长时间运行的后台计时器,具有“位置”后台模式 基于位置跟踪的iOS全职后台

  • 我的背景粘性服务是杀死奥利奥和更高的设备,任何解决方案,以获得位置的背景服务时,活动是在后台

  • 我有一个后台服务,每12分钟更新一次位置。我们希望每5-6分钟测试一次位置更新,但在Android文档中我们发现: 为了降低功耗,Android8.0(API Level26)限制了后台应用程序检索用户当前位置的频率。应用程序每小时只能接收几次位置更新。 限制是每小时固定次数?

  • 我需要每1分钟和每5米位移更新一次熔合位置(我知道这是一个错误的做法,但为了测试和在日志中显示),并且我在按下按钮后立即启动服务,我在logcat中获得位置,但只有一次。根据服务级别,onLocationChanged应该每1分钟调用一次,但它不会再次调用,即使我的GPS几乎每分钟打开一次,然后在之后关闭,但Logcat中仍然没有位置更新。我需要服务类来保持更新位置,而不影响UI或主线程 这是只显

  • 我正在制作一个定期采样数据的应用程序。由于某种原因,我无法获得GPS数据。以下是我得到的: 舱单: 我想重申,我没有问题与空位置,函数没有得到调用。 我在外面走了几分钟的时候测试了这个代码,所以卫星接收不是问题。GPS跟踪器图标一直都在。

  • 问题内容: 我正在尝试从屏幕的底部到中间在图像视图上进行翻译动画。动画完成后,我希望图像视图停留在那里。我不要setFillAfter(true),因为我想更新imageview的实际位置。 目前,我通过具有2个图像视图(在动画开始时一个,在结束时一个)来做到这一点,并且我使用setVisibility来实现此目的。这是做事的正确方法吗?这是我使用的代码: 问题答案: 然后,必须为要设置动画的Vi