【发布时间】:2011-12-23 16:19:57
【问题描述】:
如何仅通过调用一个函数来获得我所在位置的单个 GPS 定位?就这个例子来说,我怎样才能让纬度和经度成为敬酒。
【问题讨论】:
如何仅通过调用一个函数来获得我所在位置的单个 GPS 定位?就这个例子来说,我怎样才能让纬度和经度成为敬酒。
【问题讨论】:
这里有两个官方的位置页面:http://developer.android.com/reference/android/location/Location.html http://developer.android.com/reference/android/location/LocationManager.html
但是要获取最近的位置并将其显示在 Toast 中:
LocationManager locMan = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
Location loc = locMan.getLastKnownLocation(LocationManager.GPS_PROVIDER);
String lat = String.valueOf(loc.getLatitude());
String longitude = String.valueOf(loc.getLongitude());
Toast.makeText(context, lat+","+longitude, Toast.LENGTH_LONG).show();
如果你想请求一个新的位置,它是更多的代码,我不会在这里介绍。您可以在此处进行一些谷歌搜索或搜索以了解如何使用它。您需要的方法是requestLocationUpdates 或requestSingleUpdate。我猜你会更喜欢requestSingleUpdate
【讨论】:
getLastKnownLocation() 可以返回null。如果粗略准确度没问题,则可能需要尝试从多个提供商处获取最后一个已知位置。多个提供商的解决方案在这里 - stackoverflow.com/a/23365895/937715。
我认为您不能只打一个电话就可以得到定位。 GPS / Android 就是不能那样工作。手机可能有最后一个已知位置,但最后一个已知位置可能是几小时前拍摄/记录的,而且距离数英里。 getLastKnownLocation() 方法返回的位置具有时间戳和精度,可用于查看该位置是否“足够好”。
位置通常通过设置侦听器、侦听更新并在您有足够好的修复时停止侦听器来确定。请参阅 Obtaining User Location 以获得一个很好的示例,尤其是示例 isBetterLocation() 方法中的详细信息。
我发现最好创建一个异步任务,根据应用程序是否有足够好的位置来主动注册和取消注册 GPS/网络/被动侦听器,并让该类导出一个 getMyPosition() 方法,该方法返回一个如果已经建立了足够好的位置,则为 Location 对象,否则为 null。然后主代码可以进行简单的一行函数调用来获取当前位置。但这只是因为在幕后有一个异步任务在做艰苦的工作。
我尝试让我的异步任务主动取消注册 GPS 侦听器并关闭 GPS 电路以节省电池电量,当我有足够好的修复时。我关闭监听器的时间取决于应用程序的需要。让被动监听器保持打开(注册)允许我的任务/应用程序“免费”监听设备上任何其他应用程序引起的 GPS 位置报告。
获得一个足够好的职位不是一个函数调用的交易,除非你通过大量的幕后工作来做到这一点。
【讨论】: