【问题标题】:GPS Service in AndroidAndroid 中的 GPS 服务
【发布时间】:2011-02-08 12:27:06
【问题描述】:

我有一个关于 Android 服务的问题。我想知道从 GPS 获取位置变量的最佳方法是什么。我正在使用实现 GPS 模块的服务进行地理定位应用程序。为了获得位置,我在类静态和公共方法静态中创建了一个变量,以便从类外部调用,就是这样。从我刚刚在课堂上使用的 GPS 检索位置:

位置 mLocation = ServiceGPS.getLocation(); ServiceGPS 类有这个方法:

公共静态位置 getLocation(){ 返回mLocation; }

在这种情况下,我真的看不出绑定到服务的意义,因为我只需要调用静态方法。我也在考虑做一个基类或实现LocationListener,但这种方式非常简单,它可以工作并节省代码编写。

非常感谢您的帮助,并与我分享您的知识。

BR。大卫。

【问题讨论】:

  • 请记住对您得到的答案进行投票,并选择您认为最好的答案 - 这样做可以获得积分,并且人们将来更有可能回答您的问题。
  • 嗨,奥利,我已经在下面回答了。

标签: android gps


【解决方案1】:

您不能只在 Android 中“获取”位置,因为它可能来自不同的地方(最后一个已知位置、GPS 接收器、wifi 网络位置或移动数据网络),更重要的是它可能来自不同的地方需要时间来接收位置,否则您可能根本无法获得位置(例如 GPS 存在,但没有室内信号)。

获取位置可能需要一些时间,这意味着您必须在单独的线程上运行位置搜索,除非有以前缓存的位置。否则,您的应用程序将锁定直到获取位置(这可能永远不会发生,例如在没有 GPS 或地理定位网络的设备上)。

这是您需要阅读、消化和使用的关键页面: http://developer.android.com/guide/topics/location/obtaining-user-location.html 如果您不熟悉 Android 中的地理位置,请使用示例代码开始。

向应用添加地理位置我学到的东西是......

  • 永远不要假设有位置提供者。该设备可能没有网络连接,或没有 GPS。您需要在代码中进行错误处理来处理这些情况。
  • 始终使用线程进行地理查找以保持应用响应
  • 如果可能,请尝试使用 Android 上次已知位置,它提供快速锁定。您可以将背景中的位置更新为更准确的位置。
  • 如果应用程序可以在无法进行地理位置定位的设备(例如便宜的平板电脑、Google TV 等)上运行,则将位置存储在首选项中,因此用户指定一次,并且每次加载应用程序时都会使用该位置(如果找不到新位置)
  • 创建一个专门用于管理获取位置、线程等的类通常很有意义。然后您应用程序中的其他类可以像您建议的那样简单地调用静态方法,但挑战在于您用来获取值的代码到您的变量 mLocation 中!
  • 您可能根本找不到位置 - 不要以为您会,设备和环境各不相同。
  • 除非您必须拥有非常准确的位置,否则请始终使用网络位置提供程序,因为它们通常非常快速。从新鲜的 GPS 位置查找可能非常缓慢,用户会感到无聊和沮丧。谷歌地图看起来很快,但它实际上做了很多位置缓存,你会发现有时获取新位置的速度很慢。

我推荐 Mark Murphy 的 Android 电子书,他有出色的地理定位覆盖范围和源代码示例http://commonsware.com/

【讨论】:

  • +1,说得很好。添加 GPS 不仅仅是一种“即插即用”功能,它需要一些计划,因为它几乎肯定会在某些时候失败。
【解决方案2】:

我不只是得到这个职位...... 此外,我正在检查调用该服务的另一种方法的提供程序。取决于我是否会抛出异常。我之后所做的处理不是问题。我感谢你 Ollie 提供的信息。但我的问题是:

在这种情况下,我真的看不出绑定到服务的意义,因为我只需要调用静态方法。我也在考虑做一个基类或实现LocationListener,但这种方式非常简单,它可以工作并节省代码编写。

实际上我在服务中运行我的位置,因此在另一个线程中,所以我不明白你的意思。 问题似乎是,Android 中的 Location 是如何工作的? 干杯 大卫

【讨论】:

  • 服务不运行不同的线程,它们仍然在应用程序主线程上运行,只是它们能够在后台运行,而在前台没有任何活动。如果没有在显式创建的线程上完成,服务中的阻塞调用将阻止 UI 中的任何事件。
猜你喜欢
  • 2012-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-12
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
相关资源
最近更新 更多