Android中的GPS服务

时间:2011-02-08 12:27:07

标签: android gps

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

位置mLocation = ServiceGPS.getLocation(); ServiceGPS类具有以下方法:

public static Location getLocation(){     返回mLocation; }

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

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

BR。大卫。

2 个答案:

答案 0 :(得分:9)

你不能只是“获取”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 :(得分:0)

我不仅仅是获得这个职位...... 此外,我正在检查提供者调用该服务的另一种方法。并且根据我的意愿,我将不会抛出异常。我后来做的处理不是问题。我很感谢你Ollie的信息。但我的问题是:

  

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

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