2013-01-21 43 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