没有MapView的地理编码器

时间:2012-03-24 09:31:42

标签: android reverse-geocoding

我正在尝试从我的经度和纬度结果创建一个响应,以纯字符串形式的地址。当我运行调试器时,我抛出异常服务不可用我假设因为我没有输入API密钥。我的问题是,在不创建创建未使用的mapview的xml文件的情况下,我将API键放在何处?

3 个答案:

答案 0 :(得分:2)

试试这个:

Geocoder geocoder = new Geocoder(this, Locale.getDefault());

       try {
  List<Address> addresses = geocoder.getFromLocation(LATITUDE, LONGITUDE, 1);
  if(addresses != null) {
   Address returnedAddress = addresses.get(0);
   StringBuilder strReturnedAddress = new StringBuilder("Address:\n");
   for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) {
    strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n");
   }
   myAddress.setText(strReturnedAddress.toString());
  }
  else{
   myAddress.setText("No Address returned!");
  }
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  myAddress.setText("Canont get Address!");
 }

我的清单中有两个权限:

 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

答案 1 :(得分:1)

(注:答案根据评论而改变)

我原先假设Geocoder需要Google APIs Addon才能正常工作,因为documentation表示该类使用核心android框架中未提供的后端服务。

经过进一步调查后,我发现不需要Google API附加组件。相反,目标设备必须支持后端服务,我认为这意味着它需要是一个包含Play商店应用程序或谷歌地图应用程序或两者兼有的设备?

无论哪种方式,为了证明这个理论,我制作了一个不使用Google API附加组件的简单测试应用程序,但它仍适用于我的Galaxy Nexus设备。如果我在模拟器上运行它(当然,它不包括Play商店或Google地图),它会抛出Service not Available

答案 2 :(得分:0)

查看

Geocoder geocoder = new Geocoder(this, Locale.getDefault());

相反,试试这段代码......

Geocoder geocoder = new Geocoder(this);

它们是相同的代码,但我已经解决了这个问题。 但是,这太糟糕了。

HMM ..