草庐IT

android - 启动定位策略

coder 2023-11-21 原文

我通过 GPS 定期接收位置更新,问题是第一次位置更新发生的时间 - 太长了。当用户在建筑物内时,这个时间会变得更糟。

因此我正在寻找一些策略来缩短启动时间(目前我不使用 getLastKnownLocation 但我会)。我开始阅读 A Deep Dive Into Location得到一些想法和一些想法,现在我想和你讨论。

首先,上面提到的博文会遍历设备上的每个位置提供程序并查询 getLastKnownLocation,但仅在它们不太旧且在允许的精度范围内时才考虑它们。

这是我的第一个问题:我希望基于网络的位置立即可用,所以我会请求一个新的基于网络的位置,然后我会从 GPS 提供商那里获取 getLastKnownLocation,如果最后一个 GPS 位置在由基于点网络的位置和半径精度形成的圆圈内,那么我将采用 GPS 位置,无论它有多旧。你怎么看?

检查最后已知位置后,我将开始 GPS 位置跟踪,因为我只需要每 2 秒和 10 米变化一次,我会使用 lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2 * 1000, 10, this);

但是我发现了一种模式(在幻灯片 Being Epic: Best Practices for Android Development95 上的演示文稿内 96 中,他首先打开粗略和精细位置(时间和距离变化为 0,0),然后,当接收到第一个事件,他切换到真正需要的更新频率。那么,当间隔设置为 0 时,第一个 gps-update 来得更快吗?

与此模式相反,我会保持粗略更新,直到收到第一个 GPS 更新。你怎么看?

希望得到一些有趣的答案!

----------------更新----------------

我做了一些调查:我打开了 GPS 并等待修复。然后我关闭了 GPS,开了 50 公里(31 英里)。然后我使用了 A Deep Dive Into Location 中的代码获取所有 getLastKnownLocation。我试了两次,第一次是关闭 GPS,第二次是打开 GPS,但没有修复:

1) 在关闭 GPS 的情况下我得到了
- 提供商:网络,准确定位 680 米
- Provider: passive (mProvider=network), 位置同上,时间同上
- 提供者:gps,位置 null

所以我了解到,当 gps 关闭时,您将无法获得 getLastKnownLocation

2) 打开 GPS 我得到了
- 供应商:网络,准确定位 652 米
- Provider: passive (mProvider=network), 位置同上,时间同上
- 提供者:gps,位置早 2 小时,精度 12 米,时间也早 2 小时

在这里我了解到旧消息并没有失效,即使它们很明显是错误的。

在这种情况下,算法工作正常,因为我在关闭 GPS 的同时移动了。 但是,如果我进入一所房子怎么办?在那种情况下,2 小时前的 GPS 结果会非常好,即使它已经过时了。

最佳答案

在 Google IO 2013 上,他们在 session 中展示了 Beyond the Blue Dot: New Features in Android Location一种新方法,请观看视频 here .

Google 的工程师尝试了很多不同的策略,结果就是“融合位置提供程序”。它的质量显示在视频中的 12:17。

Ketan Parmar 发表了 blog post如何在示例应用程序中使用融合位置提供程序。

关于android - 启动定位策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7739366/

有关android - 启动定位策略的更多相关文章

  1. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  2. UE4 源码阅读:从引擎启动到Receive Begin Play - 2

    一、引擎主循环UE版本:4.27一、引擎主循环的位置:Launch.cpp:GuardedMain函数二、、GuardedMain函数执行逻辑:1、EnginePreInit:加载大多数模块int32ErrorLevel=EnginePreInit(CmdLine);PreInit模块加载顺序:模块加载过程:(1)注册模块中定义的UObject,同时为每个类构造一个类默认对象(CDO,记录类的默认状态,作为模板用于子类实例创建)(2)调用模块的StartUpModule方法2、FEngineLoop::Init()1、检查Engine的配置文件找出使用了哪一个GameEngine类(UGame

  3. 「Python|Selenium|场景案例」如何定位iframe中的元素? - 2

    本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决

  4. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  5. ruby - 使用 Capistrano 启动 sidekiq - 2

    我想用Capistrano启动sidekiq。下面是代码namespace:sidekiqdotask:startdorun"cd#{current_path}&&bundleexecsidekiq-c10-eproduction-Llog/sidekiq.log&"pcapture("psaux|grepsidekiq|awk'{print$2}'|sed-n1p").strip!endend它执行成功但sidekiq仍然没有在服务器上启动。输出:$capsidekiq:starttriggeringloadcallbacks*2014-06-0315:03:01executing`

  6. ruby-on-rails - 覆盖 Controller 中的 protect_from_forgery 策略 - 2

    我想使用两种不同的protect_from_forgery策略构建一个Rails应用程序:一种用于Web应用程序,一种用于API。在我的应用程序Controller中,我有这行代码:protect_from_forgerywith::exception为了防止CSRF攻击,它工作得很好。在我的API命名空间中,我创建了一个继承self的应用程序Controller的api_controller,它是API命名空间中所有其他Controller的父类,我将上面的代码更改为:protect_from_forgery:null_session.遗憾的是,我在尝试发出POST请求时遇到错误:“

  7. ruby-on-rails - fastercsv 的 Rails 3 服务器启动问题 - 2

    我有一个正在升级到Rails3的Rails2.3.5应用程序。我做了所有我需要做的升级以及当我使用启动Rails服务器时要做的事情railsserver它给了我这个PleaseswitchtoRuby1.9'sstandardCSVlibrary.It'sFasterCSVplussupportforRuby1.9'sm17nencodingengine.我正在使用ruby-1.9.2-p0并安装了fastercsv(1.5.3)gem。在puts语句的帮助下,我能够追踪到错误发生的位置。我发现执行在这一行停止了Bundler.require(:default,Rails.env)if

  8. 电脑启动后显示器黑屏怎么办?排查下面4个问题,快速解决 - 2

    电脑启动出现显示器黑屏是一个相当常见的问题。如果您遇到了这个问题,不要惊慌,因为它有很多可能的原因,可以采取一些简单的措施来解决它。在本文中,小编将介绍下面4种常见的电脑启动后显示器黑屏的原因,排查这些原因,快速解决! 演示机型:联想Ideapad700-15ISK-ISE系统版本:Windows10一、显示器问题如果出现电脑启动后显示器黑屏的情况。那么首先您需要检查一下显示器是否正常工作。您可以通过更换另一个显示器或将当前显示器连接到另一台计算机来检查显示器是否存在问题。如果问题仍然存在,那么您可以排除显示器故障的可能性。 二、显卡问题如果您的电脑配备了独立显卡,那么显卡故障也可能是导致电脑

  9. 如何判断oracle是否启动及启动oracle数据库 - 2

    plsql连接Oracle超时,完犊子了肯定是服务器断电了。得马上检查Oracle服务器状态1、检查数据库是否启动su-oracle切换到Oracle用户,输入sqlplus/assysdba显示连接状态。如果末尾显示的状态是Connectedtoanidleinstance.证明未启动2、启动数据库startup启动数据库,末尾出现Databaseopened说明数据库启动成功3、查看数据库监听是否正常先quit;断开Oracle连接,使用lsnrctlstatus查看监听状态,如果出现TNS-开头的Nolistener、Connectionrefused等错误,说明监听未启动4、启动数据库

  10. ruby-on-rails - 为什么 Rails 在启动时预加载它的所有依赖项(gems)? - 2

    当Rails启动时,它会预加载所有依赖项(gems),这会导致启动时间非常缓慢。在我正在处理的一个中型项目中,Rails的启动时间为10-15秒,具体取决于机器。虽然这在生产中不是问题,但在开发中却是一个巨大的痛苦。特别是在工作TDD/BDD时。有加速测试的解决方案(如spork),但它们会引入自己的问题。我的问题是:为什么不在每个代码文件中要求所需的依赖项,而不是在启动时预加载所有内容?手动要求的缺点是什么?额外的代码行? 最佳答案 Rails不是PHP。一些资源是自动加载的,但是您可能需要的所有资源都在启动/初始化时加载,因为最

随机推荐