2011-04-11 23 views
0

我的代码目前显示在地图上的位置,用户使用......下面地理编码您的位置找到的Android日食

private void initMyLocation() { 
    final MyLocationOverlay overlay = new MyLocationOverlay(this, map); 
    overlay.enableMyLocation(); 

    overlay.runOnFirstFix(new Runnable() { 
     public void run() { 
      controller.setZoom(8); 
      controller.animateTo(overlay.getMyLocation()); 
     } 
    }); 
    map.getOverlays().add(overlay); 
} 

代码我想使用的用户的当前位置,并执行geocding上显示地址作为吐司消息..我将不得不删除上面的代码,并检索单独的经度和纬度值的位置?最好我不想改变上面的代码,因为它已经工作..我似乎无法找到任何好的教程。有人可以指示我到一个吗? 感谢

回答

0
  1. 由于MyLocationOverlay已经实现LocationListener,你可以简单地继承它并覆盖onLocationChanged监听方法,有执行地理编码(最好是在一个新的线程/异步任务来避免阻塞叠加处理!)。

    喜欢的东西:

    private void initMyLocation() { 
        final MyLocationOverlay overlay = new MyLocationOverlay(this, map){ 
         public void onLocationChanged(android.location.Location location) 
         { 
          //subclass AsyncTask to take a location parameter for 
          //doInBackground where it geocodes and then passes a String 
          //to onPostExecute where you can display a toast 
          new MyAsyncTask().execute(location); 
    
          //remember to call the parent implementation to avoid breaking 
          //MyLocationOverlay default functionality 
          super.onLocationChanged(location); 
         } 
        }; 
        overlay.enableMyLocation(); 
    
        overlay.runOnFirstFix(new Runnable() { 
         public void run() { 
          controller.setZoom(8); 
          controller.animateTo(overlay.getMyLocation()); 
         } 
        }); 
        map.getOverlays().add(overlay); 
    } 
    
  2. 另一种选择可能是编写自定义LocationListener并注册为位置更新和做几乎同样的事情,在上面的代码。国际海事组织,这可能是多余的,不必要的昂贵,因为,如上所述,你已经有一个LocationListener实现挂钩为什么写另一个?

+0

@ no.good.at.coding谢谢..它出现一个错误...'MyAsyncTask不能解析为类型'..所以我创建一个新的类来执行地理编码 - '' MyAsyncTask'类?我找到的任何地理编码教程都使用了经度和纬度..所以我可以通过我的位置变量进行地理编码?对不起,我很新的Android .. – IrishGal 2011-04-11 09:55:29

+0

@IrishGal是的,如果你看到片段中的评论,我提到你应该'子类AsyncTask'。所以你应该创建一个新的类来扩展['AsyncTask'](http://developer.android.com/reference/android/os/AsyncTask.html),你应该在那里写地理编码。使用AsyncTask(或任何其他会产生新线程的技术)的原因是,地理编码可能是一个涉及网络I/O的昂贵操作,由于我们从内部启动它,会阻止“MyLocationOverlay”的操作那个班。 – 2011-04-11 16:13:33

+0

另外,['Location]](http://developer.android.com/reference/android/location/Location.html)对象具有getLatitude()和getLongitude()方法,它们会给你纬度和由该对象封装的经度值。 – 2011-04-11 16:22:06