2013-01-21 44 views
3

我現在正在處理與Google地圖服務相關的項目。我想指出我目前在我的地圖中的位置。爲此,我有了使用itemizedoverlay的想法。我在Geopoint的幫助下檢索當前位置。但是當我在代碼中使用itemizedoverlay時,無法拾取位置,我在我的OnCreate方法中使用它。如果我將它移動到OnLocationChanged方法,那麼GeoPoint(point)將不會被itemedoverlay拾取,並且會以錯誤結束,並且在當前情況下,應用程序被壓縮。當前Loation不採摘android

 MapView mapView; 
    Location location; 
    LocationManager locationmanager; 
    LocationListener locationlistener; 

     public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

     mapView = (MapView) findViewById(R.id.mapView); 
     mapView.setTraffic(true); 
     mapView.setBuiltInZoomControls(true); 

     //locationmanager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    // locationlistener = new GPSLocationListener(); 
     // locationmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER 0,0,locationlistener);                       

     GeoPoint point = new GeoPoint(
       (int) (location.getLatitude() * 1E6), 
       (int) (location.getLongitude() * 1E6)); 

      Toast.makeText(getBaseContext(), 
       "Latitude: " + location.getLatitude() + 
       " Longitude: " + location.getLongitude(), 
       Toast.LENGTH_SHORT).show(); 

     List<Overlay> mapOverlays = mapView.getOverlays(); 
     Drawable drawable = this.getResources().getDrawable(R.drawable.icon); 


      HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable,this); 
      OverlayItem overlayitem = new OverlayItem(point,"",""); 
      itemizedoverlay.addOverlay(overlayitem); 
      mapOverlays.add(itemizedoverlay); 

} 

/*  private class GPSLocationListener implements LocationListener 
     { 
     @Override 
     public void onLocationChanged(Location location) { 
      if (location != null) { 
      GeoPoint point = new GeoPoint(
       (int) (location.getLatitude() * 1E6), 
       (int) (location.getLongitude() * 1E6)); 

      Toast.makeText(getBaseContext(), 
       "Latitude: " + location.getLatitude() + 
       " Longitude: " + location.getLongitude(), 
       Toast.LENGTH_SHORT).show(); 

      OverlayItem overlayitem = new OverlayItem(point,"",""); 
       itemizedoverlay.addOverlay(overlayitem); 
       mapOverlays.add(itemizedoverlay); 

} 
     } */ 


    @Override 
    protected boolean isRouteDisplayed() { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onProviderDisabled(String provider) { 

Toast.makeText(getBaseContext(),"GPS Disabled",Toast.LENGTH_SHORT).show();  

    } 

    @Override 
    public void onProviderEnabled(String provider) { 

     Toast.makeText(getBaseContext(),"GPS Enabled",Toast.LENGTH_SHORT).show(); 

    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     // TODO Auto-generated method stub 

    } 

您能否爲我推薦一個解決方案?先謝謝了,如果我在這裏犯了錯誤,我很抱歉。

回答

2

您可以使用com.google.android.maps.MyLocationOverlay將自動獲得顯示在您的地圖視圖您的位置。它甚至會在旅行時更新您的位置。

注意:您分別在onResume和onPause上顯示調用enableMyLocation和disableMyLocation以獲得更好的性能。

@Override 
    protected void onResume() { 
     super.onResume(); 
     if (locationOverlay != null) 
      locationOverlay.enableMyLocation(); 
    } 

    @Override 
    protected void onPause() { 
     if (locationOverlay != null) 
      locationOverlay.disableMyLocation(); 
     super.onPause(); 
    } 

EDITED

MyLocationOverlay locationOverlay; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mapView = (MapView) findViewById(R.id.mapView); 
     mapView.setTraffic(true); 
     mapView.setBuiltInZoomControls(true); 
locationOverlay = new MyLocationOverlay(this, mapView); 
List<Overlay> mapOverlays = mapView.getOverlays(); 
mapOverlays.add(locationOverlay); 
} 

還添加的onResume()和的onPause()方法。

+0

雖然我沒有得到當前位置的地圖,它會工作兄弟嗎? – Tony

+0

GPS位置並不總是專門在室內使用。所以如果你有GPS設置位置監聽器,你在室內,那麼你可能不會收到GPS信號。 MyLocationOverlay查找使用哪個提供程序並設置位置偵聽器並獲取位置 –

+0

如果看到enableMyLocation的文檔,它會顯示「嘗試啓用MyLocation,並從LocationManager.GPS_PROVIDER和LocationManager.NETWORK_PROVIDER註冊更新」。因此,它會註冊提供商和您無需擔心設置監聽器並重新更新覆蓋以進行更新。 –

0

我覺得你有與Google Maps Android API v2

去的更多信息,請檢查Google Maps Android API v2

請從上面的鏈接檢查示例代碼的鏈接。 sample code

+0

謝謝你的回覆。但是,鏈接並不能解釋我真正想要的。它只涉及獲取地圖。我想用圖標指出我地圖中的當前位置。 – Tony

+0

鏈接中有示例代碼的鏈接。請檢查我的更新代碼。 –

+1

@Rahul爲什麼?有什麼必要? – 2013-01-21 12:32:23

0

位置是沒有在那裏由您在的onCreate()初始化所以我想它的空。還有一件事,如果你有拉特和長,分項將肯定會顯示地圖上的位置。 需要檢查許可Access_Course_location and Access_fine_location in Manifest。

+0

我已經在清單兄弟中定義了。此外它還提供了: <使用權限android:name =「android.permission.INTERNET」/> – Tony

+0

您的Toast顯示lat和long ?你沒有註冊位置經理那麼你怎麼能讀取位置 – 2013-01-21 12:38:04

2

嘗試用這個 -

/** 
* Setting Google Map to provided location 
*/ 
private void setMaptoLocation(Location location) { 
    mapView.setBuiltInZoomControls(true); 
    mapView.setSatellite(true); 
    int LAT = (int)(location.getLatitude() * 1E6) ; 
    int LNG = (int)(location.getLongitude() * 1E6) ; 
    GeoPoint point = new GeoPoint(LAT, LNG); 
    mapController = mapView.getController(); 
    List<Overlay> mapOverlays = mapView.getOverlays(); 
    Drawable drawable = this.getResources().getDrawable(R.drawable.icon); 
    HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable,this); 
    OverlayItem overlayitem = new OverlayItem(point,"",""); 
    itemizedoverlay.addOverlay(overlayitem); 
    mapOverlays.add(itemizedoverlay); 
    mapController.setZoom(ZOOM_LEVEL - ZOOM_LEVEL/2); // Set zoom level per requierment 
    mapController.animateTo(point); 

} 
+0

這也是不適合我哥哥。用drawable顯示一些錯誤。 – Tony

+1

哦...我雖然你會添加drawable..anyways ...我已經編輯了我的帖子... plz ..現在...仍然出現錯誤..plz post logcat – Jambaaz

+0

這裏還顯示位置在某處其他。似乎更接近南非幾內亞灣。我認爲這可能與地理位置問題有關。但它有點作用。你有什麼主意嗎? – Tony