2011-04-11 24 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