19

我不需要显示地图。但是,我需要使用 gps/3g 网络来定位我当前的位置 ADDRESS(不是 long 和 lat),然后将其添加到自动短信响应中,以通知某人我目前无法回复,并包括字符串地址我现在的位置。我有短信工作,只需要找出一种访问gps和提取地址的方法。我已经看到了 lat/long 的示例代码。也许我需要将 lat/long 转换为 google maps API 中的地址?我不确定如何去做。欢迎任何建议/代码片段/类似教程!谢谢。:)

4

3 回答 3

28

有两个步骤:

  1. 使用 GPS、网络、最后已知位置等获取当前位置 - 纬度和经度。Android位置文档包含示例代码。

  2. 使用 Android Geocoder 类请求查找以将纬度/经度转换为地址(您可以从中轻松提取城市、国家、街道等)。具体来说,您需要使用 getFromLocation() 方法

笔记:

  • getFromLocation() 方法返回一组匹配项。在某些情况下,您可以向用户展示一组(例如 5 个)并让他们选择最佳的,或者您可以只使用第一个,假设它是最好的。
  • 请记住,这两个电话都需要时间。GPS/网络可能需要一段时间才能提供位置。同样,对 getFromLocation() 的调用可能需要一些时间,因为它会通过网络到达 Google Maps API。因此,对各种场景使用广泛的错误处理至关重要,并且将这两个调用移到单独的线程上,这样您就不会锁定应用程序用户界面(查看 AsyncTask)
  • Geocoder 类后端仅存在于 Google 批准的设备上。因此,在任何没有 GMail/Market/Maps 的设备上,查找基本上都会失败。
于 2011-02-17T12:44:25.503 回答
15

答案在这里:http: //developer.android.com/reference/android/location/Geocoder.html

您需要创建 Geocoder 对象并调用getFromLocation(double latitude, double longitude, int maxResults)

Geocoder gCoder = new Geocoder(myContext);
ArrayList<Address> addresses = gCoder.getFromLocation(123456789, 123456789, 1);
if (addresses != null && addresses.size() > 0) {
    Toast.makeText(myContext, "country: " + addresses.get(0).getCountryName(), Toast.LENGTH_LONG).show();
}
于 2011-02-17T12:43:43.583 回答
0

如您所知,要获取位置地址,您可以使用 google GeoCoder

除了通过提供纬度和经度来获取位置地址之外,您还可以使用此 API。这比谷歌地理编码器更可靠且速度更快。这里我附上链接和小例子......

API 网址 -

https://maps.googleapis.com/maps/api/geocode/json?latlng=

您可以在 url 的等号旁边连接纬度和经度值。

例子 -

纬度 = 6.123456

液化天然气 = 79.123456

字符串网址 =

" https://maps.googleapis.com/maps/api/geocode/json?latlng=lat+ ","+lng";

这将返回一个不错的jsonObject,您可以使用它,只需尝试一下。目前我正在将此 API 用于我的位置服务,并且它比普通的 google geoCoder API 更快。要捕获 json 响应,您可以使用volley或任何东西。快乐编码.

于 2017-08-21T12:19:12.350 回答